Problème d'envoi reception winsock
:salut:
Alors voila mon souci, j'ai un programme client et un programme serveur. Le client se connecte au serveur et lui envoi 3 paramètre (utilisation de la fonction send() trois fois). Le serveur traite ces paramètre et doit envoyer une réponse au client, voici mon code :
Coté client :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| bool verifMd5(string md5File, string addIp, int port, string ucName) {
char recvbuf[DEFAULT_BUFLEN] = "";
int recvbuflen = DEFAULT_BUFLEN;
int iResult;
string end = "END";
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = inet_addr(addIp.c_str());
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
connect(sock, (SOCKADDR *)&sin, sizeof(sin));
send(sock, ucName.c_str(), ucName.length(), 0);
Sleep(500);
send(sock, md5File.c_str(), md5File.length(), 0);
Sleep(500);
send(sock, end.c_str(), end.length(), 0);
recv(sock, recvbuf, recvbuflen, 0);
closesocket(sock);
WSACleanup();
cout << recvbuf << endl;
system("PAUSE");
} |
Coté serveur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| int main(void) {
listenPort(1563);
system("PAUSE");
return 0;
}
int attenteInfos(int port, string &fileNameFin, SOCKET csock, SOCKET sock) {
char recvbuf[DEFAULT_BUFLEN] = "";
int recvbuflen = DEFAULT_BUFLEN;
int xCountMess = 1;
string ucName;
string md5;
int devoirEnvoyer;
string fileName;
do {
recv(csock, recvbuf, recvbuflen, 0);
if (xCountMess == 1) {
ucName = recvbuf;
fileName = verifMachine(ucName);
} else if (xCountMess == 2) {
md5 = recvbuf;
}
xCountMess ++;
} while (memcmp(recvbuf, "END", strlen("END")) != 0);
if (fileName != "NULL") {
if (testMd5(md5, fileName) == true) {
devoirEnvoyer = 0;
} else {
devoirEnvoyer = 1;
}
} else {
devoirEnvoyer = 1;
}
fileNameFin = fileName;
return devoirEnvoyer;
}
void listenPort(int port) {
string fileNameFin;
int doitEnvoyer;
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);
int sinsize = sizeof(csin);
if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET) {
doitEnvoyer = attenteInfos(port, fileNameFin, csock, sock);
}
send(sock, (const char*) doitEnvoyer, 1, 0);
closesocket(sock);
WSACleanup();
} |
Tout fonctionne super bien à part que je dois utiliser la fonction sleep() ce qui me plait pas enormement et que le client ne reçoi rien pourtant la fonction recv() me parrait correct, un problème de timming entre client et serveur?
Merci à ceux qui jetterons un oeil et me répondrons peut être... ;)