IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Socket et deconnexion : Tcp


Sujet :

C++Builder

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Socket et deconnexion : Tcp
    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...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TcpClient1->Disconnect();
    TcpClient1->Close();
    ... 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
    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();
                      }
    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() .
    J'espère avoir été clair. Si vous voulez des précisions, hésitez pas.
    Dernière modification par Invité ; 20/04/2010 à 21h51. Motif: Titre plus précis

Discussions similaires

  1. server de sockets unix et tcp/ip en mm tps?
    Par iznogoud36 dans le forum Linux
    Réponses: 7
    Dernier message: 02/01/2007, 08h58
  2. Socket : UDP ou TCP
    Par lafracas dans le forum Développement
    Réponses: 2
    Dernier message: 10/04/2006, 22h43
  3. code c pour sockets (udp vers tcp et inversement)
    Par HiT dans le forum Développement
    Réponses: 11
    Dernier message: 19/11/2005, 18h03
  4. raw socket et protocole TCP/IP
    Par robertmouac dans le forum Développement
    Réponses: 3
    Dernier message: 09/03/2005, 23h09
  5. [Socket] Buffer et TCP
    Par rgz dans le forum Web & réseau
    Réponses: 7
    Dernier message: 14/10/2003, 13h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo