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 :
Coté serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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"); }
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?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }
Merci à ceux qui jetterons un oeil et me répondrons peut être...![]()
Partager