Poublem descripteur socket

Résolu
cs_stillfelil Messages postés 108 Date d'inscription samedi 31 juillet 2004 Statut Membre Dernière intervention 12 septembre 2009 - 12 sept. 2006 à 15:11
cs_stillfelil Messages postés 108 Date d'inscription samedi 31 juillet 2004 Statut Membre Dernière intervention 12 septembre 2009 - 13 sept. 2006 à 09:03
Bonjour je vien de creer un programme Serveur
mais voila j'ai un probleme avec le descripteur SOCKET du client retourné par accept
ca me donne toujour 0 meme si ya connexion de plusieurs client
avec le descripteur su seveur pas de probleme
(jai compris que j'avais un probleme parce que je ne peut pas intercepter les message recus)
voila mon code:

#include <winsock2.h>
 #pragma comment(lib, "ws2_32.lib)
//...
    SOCKET sock;
    SOCKET sockc;
    SOCKADDR_IN ssin;
    SOCKADDR_IN csin;

    const int _http = 80;
   WSADATA WSAData;

    if(WSAStartup(MAKEWORD(2, 0), &WSAData) == SOCKET_ERROR)
    {
        closesocket(sock);
        WSACleanup();
        return;
    }
    ssin.sin_addr.s_addr = htonl(INADDR_ANY);
    ssin.sin_family         = AF_INET;
    ssin.sin_port         = htons(_http);

   
    sock = socket(AF_INET,SOCK_STREAM,0);

   if(    bind(sock, (SOCKADDR *)&ssin, sizeof(ssin))== SOCKET_ERROR)
   {
        closesocket(sock);
        WSACleanup();
        return;
   }

    if( listen(sock, 10)== SOCKET_ERROR)
       {
        closesocket(sock);
        WSACleanup();
        return;
       }
   
    bool running  = true;

    int len = sizeof(csin);
    while(true) // Boucle Infinie pour accepter les connexions entrantes
    {   
     
        if(sockc = accept(sock, (SOCKADDR *)&csin, &len)== SOCKET_ERROR)
        {
            closesocket(sock);
            WSACleanup();
            return;
        }

        if(sockc != INVALID_SOCKET)
        {   
        int nbr_data = 0;
   
    while(nbr_data <=0 )
        {
            nbr_data = recv(sockc,texte,2,0);
            Sleep(500);
        }  
                            //Il ny a aucun message intercepte ,alors que j'envoi commem un message via une
                          //autre socket
        }

Merci de m'aider

2 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
12 sept. 2006 à 21:24
Salut,
Probleme de priorité, il faut mettre des parentheses:

if( (sockc accept(sock, (SOCKADDR *)&csin, &len)) SOCKET_ERROR)

Au passage, si accept() échoue il retourne INVALID_SOCKET et pas SOCKET_ERROR.
3
cs_stillfelil Messages postés 108 Date d'inscription samedi 31 juillet 2004 Statut Membre Dernière intervention 12 septembre 2009 3
13 sept. 2006 à 09:03
Merci beaucoup aardman
;-)
0
Rejoignez-nous