mehrere clients mit winsock



  • int annehmen()
    {
    
        FD_ZERO(&fdSetRead);     
        FD_SET(acceptSocket,&fdSetRead);
        for(u=0;u<MAX_CLIENTS;u++)
        {
          if(clients[u]!=INVALID_SOCKET)
          {
            FD_SET(clients[u],&fdSetRead);
          }
        }
        rc=select(0,&fdSetRead,NULL,NULL,NULL);
        if(rc==SOCKET_ERROR)
                MessageBox(NULL,"SOCKET_ERROR","",MB_OK);
        if(FD_ISSET(acceptSocket,&fdSetRead)) {
        for(u=0;u<MAX_CLIENTS;u++)
          {
            if(clients[u]==INVALID_SOCKET)
            {
              clients[u]=accept(acceptSocket,NULL,NULL);
              MessageBox(NULL,"Neuen Client angenommen","",MB_OK);
              break;
            }
          }
          //einen freien platz für den neuen client suchen, und die verbingung annehmen
    
       }
        for(u=0;u<MAX_CLIENTS;u++)
        {
          if(clients[u]==INVALID_SOCKET)
          {
            continue; // ungültiger socket, d.h. kein verbunder client an dieser position im array
          }
          if(FD_ISSET(clients[u],&fdSetRead))
          {int x=0,c;
         long rc2;
         timeout.tv_sec=0; 
         timeout.tv_usec=0; 
         rc=select(0,&fdSetRead,NULL,NULL,&timeout);
         if(rc>0) 
         {      PlaySound("sounds\\goonigugu.wav",NULL,SND_FILENAME|SND_ASYNC);
    
                if(FD_ISSET(clients[u],&fdSetRead))
          {     rc2=recv(clients[u],buf3,1024,0); 
                if(rc2==0 || rc2==SOCKET_ERROR)
            {
              MessageBox(hwnd,"Client hat die Verbindung geschlossen","",MB_OK);
              closesocket(clients[u]);    // socket schliessen         
              clients[u]=INVALID_SOCKET;  // seinen platz wieder freigeben
            }
            }
                if(sounds()==-1)
                {
                strncat(buf,buf3,rc2);
                SetWindowText(hedit1,buf);
                SendMessage( hedit1, WM_VSCROLL, SB_BOTTOM, 0 );
                }
          }
        }
    }
    }
    

    was is daran falsch???? wenn ich mit nem client drauf geh passiert nix (programm hängt)



  • Bei deinem ersten select()-Aufruf übergibst du als letzten Parameter NULL, das steht für blockierende Operation. Könnte das die Ursache sein?

    Rob'


Anmelden zum Antworten