Eu...c'est encore moi, je vais me faire taper à force
Mais bon, ça peut en aider d'autre aussi hein...hein?
Bon voila, j'ai 2 prog, un client et un serveur (jusque là tout est normal), le client se connecte au serveur et lui envoi un premier message avec le md5 du fichier qui'il va envoyer par la suite, le serveur enregistre ce md5 en memoire, effectue un traitement avec et renvoi une réponse, le client doit renvoyer un autre message jusqu'à lui envoyer le message "END" pour terminer la transmission. Le problème c'est que j'ai ce code mais ça ne vas pas... et je ne pense pas qu'il faille se deconnecter à chaque fois puis se reconnecter, j'ouvre ma connexion avecpuis je peux envoyer autant de truc que je veux non?
Code : Sélectionner tout - Visualiser dans une fenêtre à part connect(sock, (SOCKADDR *)&sin, sizeof(sin));
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 bool verifMd5(string md5File, string addIp, int port, string ucName) { 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(), (int)strlen(ucName.c_str()), 0); //pour gerer le retour du serveur je penser faire ici un recv(csock, recvbuf, recvbuflen, 0); ... je pense que ça devrait aller system("PAUSE"); send(sock, md5File.c_str(), (int)strlen(md5File.c_str()), 0); closesocket(sock); WSACleanup(); }
Voili voilou...
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 int main(void) { int port = 1563; char *nameFile; char recvbuf[DEFAULT_BUFLEN] = ""; int recvbuflen = DEFAULT_BUFLEN; 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) { do { //ça va pas du tout ça car en bouclant comme ça il m'affiche ne console tout le temps le premier envoi effectuer avec le client...en boucle... recv(csock, recvbuf, recvbuflen, 0); cout << recvbuf << endl; closesocket(sock); WSACleanup(); } while (recvbuf != "END"); } system("PAUSE"); return 0; }
Ha si, aussi, je voulais essayer de voir pour une gestion de timeout, genre le client arrive à se connecter au serveur, envoi le premier message mais la réponse met trop de temps à arriver... pareil coté serveur... Si vous avez des idées...
Merci à tous !
Mais si, mais si... un jour, quand je posterais, ce sera un code fini, propre, commenté et tout pour aider les gens et pas pour leur faire fondre le cerveau... Mais si, mais si...![]()
Partager