Bien le bonjour a tous ^^ - Je viens souvent sur le site pour apprendre les ficelles du m�tier comme on dis. Je trouve ce site vraiment g�nial et j'aimerai commencer a entrer dans la communaut� ^^
Je me lance ! Alors, j'ai voulu coder un programme de client sous builder 6 qui se connecte a un serveur cod� en C. Le serveur doit recevoir en permanence des donn�es jusqu'� d�connexion du client. J'ai donc mit un " while(1)" pour boucler la r�ception. Le soucis, c'est que j'aimerai avoir une "d�connexion propre". Par exemple, mon client se d�connecte pour laisser la place a un autre et ainsi lib�rer le serveur. Or, si je fait...
... pour d�connecter mon client, le serveur reste inactif... et si je ferme mon programme, j'ai l'erreur 10053. Voici le code serveur.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 TcpClient1->Disconnect(); TcpClient1->Close();
Donc mon soucis est de garder le serveur ouvert jusqu'� la d�connexion du client de borland. Je sais que l'erreur est le while(1) mais sans cela, le serveur re�ois une fois les donn�es et se ferme, ne permettant aucune connexion.... J'ai test� avec un serveur sous borland en indiquant avec un label l'�tat du serveur. Et je n'ai jamais vu "d�connexion" affich�. M�me avec les ->Disconnect() et ->Close() .
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 if(sock_err != -1) // ou SOCKET_ERROR { //Demarrage de l'ecoute à partir du server sock_err = listen(sock, 5); printf("Ecoute du port %d...\n", PORT); /* Si la socket fonctionne */ while(1) { if(sock_err != -1) // ou SOCKET_ERROR { /* Attente pendant laquelle le client se connecte */ printf("Patientez pendant que le client se connecte sur le port %d...\n", PORT); sock = accept(sock, (SOCKADDR*)&sin, &recsize); printf("Un client se connecte avec la socket %d de %s \n", sock, inet_ntoa(sin.sin_addr), htons(sin.sin_port)); sock_err = send(sock, buffer, 50, 0); if(sock_err != -1) { if(recv(sock, buffer ,sizeof(buffer), 0) != SOCKET_ERROR) strcpy(buffer1, buffer); if(recv(sock, buffer ,sizeof(buffer), 0) != SOCKET_ERROR) strcpy(buffer2, buffer); if(recv(sock, buffer ,sizeof(buffer), 0) != SOCKET_ERROR) strcpy(buffer3, buffer); } printf("1ére val : %s\n",buffer1); printf("2nd val : %s\n",buffer2); printf("3éme val : %s\n",buffer3); } } //fermeture de la socket printf("Fermeture de la socket...\n"); closesocket(sock); printf("Fermee \n"); } //libére les ressources allouées par la fonction WSAStartup() WSACleanup(); }
J'esp�re avoir �t� clair. Si vous voulez des pr�cisions, h�sitez pas.
Partager