Envois et reception de commande

Signaler
Messages postés
1
Date d'inscription
mardi 29 mai 2007
Statut
Membre
Dernière intervention
15 juillet 2007
-
Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007
-
Salut
Voici mon code source .
La connection entre le client et le serveur se passe bien, mais je n'ai pas su ecrirele code qui me permettera d'envoyer l'invite de commande avec une boucle...
Pourriez vous m'aider ?

Code serveur

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<winsock2.h>
 
/*********************************/
int erreur=0;
WSAData initialisation;
SOCKET ma_socket;
SOCKET acceptation;
int temp;
SOCKADDR_IN info_client;
char buffer[65000];
int reception;
/********************************/
 
int main()
{
/*initialisation de winsock*/
erreur = WSAStartup(MAKEWORD(2,0), &initialisation);
if(erreur!=0)
{printf("Erreur lors de l'initialisation de WSAStartup. %d\n", WSAGetLastError());}
else
{printf("WSAStartup : OK\n");}
/*ouverture de la socket*/
ma_socket = socket(AF_INET, SOCK_STREAM, 0);
if(ma_socket!=INVALID_SOCKET)
{printf("Opening socket : OK\n");}
else
{printf("Erreur lors de l'ouverture de la socket. %d\n", WSAGetLastError());}
/*sockoption*/
temp=1;
erreur = setsockopt(ma_socket, IPPROTO_TCP, TCP_NODELAY, (char*)&temp, sizeof(temp));
if(erreur!=0)
{printf("Erreur lors de la definition de l'algorithme de Nagle. %d\n", WSAGetLastError());}
else
{printf("Algorithme de Nagle : OK\n");}
 
/*ecoute sur une ip et un port*/
info_client.sin_family=AF_INET;
info_client.sin_addr.s_addr=INADDR_ANY; // ecoute sur les IPs locales.
info_client.sin_port=htons(7777);
erreur=bind(ma_socket, (struct sockaddr*)&info_client, sizeof(info_client));
if(erreur!=0)
{printf("Erreur lors de la lise en ecoutes sur l'ip et/ou le port. %d\n", WSAGetLastError());}
else
{printf("IP et port : OK\n");}
 
/*attente de la connection du client*/
erreur=99;
while(erreur!=0)
{erreur=listen(ma_socket, 1);
printf("Attente de la connection du client.\n");}
 
/*acceptaion de la demande de connection*/
temp=sizeof(info_client);
acceptation=accept(ma_socket, (struct sockaddr*)&info_client, &temp);
if(acceptation!=INVALID_SOCKET)
{printf("connection du client : OK\n");
 
 
/***************************************************************/
memset(buffer, 0, sizeof(buffer));
strcpy(buffer, "\nRFT >"); // l'invite de commande
send(ma_socket, buffer, strlen(buffer), 0);
 
recv(acceptation, buffer, 1515, 0); // reception de la commande
if(strcpm(buffer, "com1")==0); //comparaison de la commande
{memset(buffer,0,sizeof(buffer));
strcpy(buffer, "\nCommande Correcte.");
send(ma_socket, buffer, sizeof(buffer));}
/***********************************************************/}
else
{printf("Connection invalide. %d\n", WSAGetLastError());}
 
/*reception des données*/
reception=recv(acceptation, buffer, 1515, 0);
if(reception==SOCKET_ERROR)
{printf("Aucune donnes recue. %d\n", WSAGetLastError());}
else
{buffer[reception]=0;
printf("Le Client dit :\n\t%s", buffer);}
 
/*Fermeture de la cession TCP*/
erreur=shutdown(acceptation, 2);
if(erreur!=0)
{printf("Erreur lors de la fermeture de la session TCP. %d\n", WSAGetLastError());}
else
{printf("Fermeture de la session TCP : OK\n");}
 
/*fermeture des 2 sockets*/
erreur=closesocket(acceptation);
if(erreur!=0)
{printf("Erreur lors de le fermeture de la socket 1. %d\n", WSAGetLastError());}
else
{printf("Fermeture de la socket : OK\n");}
 
erreur=closesocket(ma_socket);
if(erreur!=0)
{printf("Erreur lors de le fermeture de la socket 2. %d\n", WSAGetLastError());}
else
{printf("Fermeture de la socket : OK\n");}
 
/*Fermeture de winsock*/
erreur=WSACleanup();
if(erreur!=0)
{printf("Ereur lors de la fermeture de WinSock. %d\n", WSAGetLastError());}
else
{printf("Fermeture de winsock : OK\n");}
 
system("PAUSE");
 
}
 

code client

#include<winsock2.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
/*Le client*/
 
int erreur=0;
WSAData initialisation;
SOCKET ma_socket;
int temp;
SOCKADDR_IN info_serveur;
char buffer[65000];
int envoi;
 
int main()
{
/*initialisation de winsock*/
erreur = WSAStartup(MAKEWORD(2,0), &initialisation);
if(erreur!=0)
{printf("Erreur lors de l'initialisation de WSAStartup. %d\n", WSAGetLastError());}
else
{printf("WSAStartup : OK\n");}
/*ouverture de la socket*/
ma_socket = socket(AF_INET, SOCK_STREAM, 0);
if(ma_socket!=INVALID_SOCKET)
{printf("Opening socket : OK\n");}
else
{printf("Erreur lors de l'ouverture de la socket. %d\n", WSAGetLastError());}
/*sockoption*/
temp=1;
erreur = setsockopt(ma_socket, IPPROTO_TCP, TCP_NODELAY, (char*)&temp, sizeof(temp));
if(erreur!=0)
{printf("Erreur lors de la definition de l'algorithme de Nagle. %d\n", WSAGetLastError());}
else
{printf("Algorithme de Nagle : OK\n");}
 
/*Ouverture de la session TCP*/
info_serveur.sin_family=AF_INET;
info_serveur.sin_addr.s_addr=inet_addr("127.0.0.1");
info_serveur.sin_port=htons(7777);
 
erreur=connect(ma_socket, (struct sockaddr*)&info_serveur, sizeof(info_serveur));
if(erreur!=0)
{printf("Erreur lors de l'ouverture de la session TCP. %d\n", WSAGetLastError());}
else
{printf("Remote Victim Fucked ...\n");
 
 
 
/***********reception de l'invite*************************/
acceptation=accept(ma_socket, (struct sockaddr*)&info_serveur, sizeof(info_client));
recv(acceptation, buffer, 1515, 0);
/********************/
printf("\n%s ", buffer);
memset(buffer, 0, sizeof(buffer));
char commande[50]
scanf("%s", &commande);
/********************evois de la commande*********/
strcpy(buffer, commande);
envoi=send(ma_socket, buffer, strlen(buffer), 0);
memset(buffer, 0, sizeof(buffer));
/**********************************************************/
}
 
 
 
 
/*fermeture de la cession TCP*/
erreur=shutdown(ma_socket, 2);
if(erreur!=0)
{printf("Erreur lors de la fermeture de la session TCP. %d\n", WSAGetLastError());}
else
{printf("Fermeture de la session TCP : OK\n");}
 
/*Fermeture de la socket*/
erreur=closesocket(ma_socket);
if(erreur!=0)
{printf("Erreur lors de le fermeture de la socket. %d\n", WSAGetLastError());}
else
{printf("Fermeture de la socket : OK\n");}
 
/*Fermeture de winsock*/
erreur=WSACleanup();
if(erreur!=0)
{printf("Ereur lors de la fermeture de WinSock. %d\n", WSAGetLastError());}
else
{printf("Fermeture de winsock : OK\n");}
 
system("PAUSE");
 
}
 

1 réponse

Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

Bonjour,

Déjà ton code est pas indenté. Je le lis comme même.

Bon.

Dans le serveur, au niveau du "send" il faut mettre un \n a la fin sinon le printf du client marchera jamais. On met toujours le \n apres la ligne, pas avant la ligne(c'est valable toujours, donc pour le serveur et le client)

fais deja ca et indente ton code stp.

Une autruche ne se cuit pas aux petits lardons