Frage zu Socket...



  • Hallo zusammen,

    ich habe ein kleines Chatprogramm gebastelt auf Basis von SOCKET, das aber nur
    direkt also Server <-> ein Client arbeitet.
    Nun wollte ich das Programm erweitern, so das mehrere Clienten unterstützt werden.

    Nun meine Frage, auf Serverseite gibt es ja zwei SOCKET Variablen, accept und listensocket. Muss ich nun für jeden Client alle beiden SOCKET Variablen bereitstellen oder genügt nur den Listen-Socket als Array oder besser noch dynamisch mittels z.b. vector<> zu erstellen???? 😕 (auf Serverseite)

    Ich habe schon versucht nur die Listen-Socket, das Prg stürtzt aber ab wenn ich einen zweiten clienten verbinde. Der Debuger hilft mir auch nicht, die Entwicklungsumgebung harmoniert nicht mit den Funktionen listen(), recv() etc. im Debug-Modus, bekomme ne Fehlermeldung das das im Debugmodus nicht geht.

    Benutze Visual C++.net 2003

    Weiß jemand Rat?????
    thx 😃



  • Du brauchst nur einen Socket er listen()'ed



  • also du brauchst nur den socket, den du durch accept bekommst verwenden und in einen vector stecken

    if ((sock_conn=accept (sock_, (struct sockaddr*) &addr, &addr_len))<0)
    {
      // error
    }
    else
    {
      //socket sock_conn verwendbar
    }
    

    sock_ ist der listener

    Joe



  • thx, dann liegt das problem woanders...



  • Guten Morgen !

    Man sollte aber auch auf verschiedenste Grundbedingungen für sockets achten, für z.B.:

    bind_flag = bind( my_socket, (struct sockaddr *)&my_address, sizeof(my_address) );
    

    sollte "my_address.sin_addr.s_addr = INADDR_ANY" gesetzt sein, damit der Server jeden
    Client akzeptieren kann.

    Außerdem sollte man z.B. beim arbeiten mit "BSD IPC Using Internet Stream Sockets" den
    zweiten Parameter mit einer 5 versehen, für die maximal zu puffernden Anfragen:

    listen_flag = listen( my_socket, 5 );
    

    Und dann auch nicht vergessen, nach jedem Datenaustausch die entsprechenden sockets
    wieder zu schliessen, daweil die Verbindung sonst nicht "unendlich" lange läuft.

    Vielleicht ist dort irgendwo Dein Fehler :xmas1: .

    MFG



  • du kannst auch cbClientSocket und cbServerSocket aus cbccl nehmen.
    Das läuft unter Win32/WinCE/Linux und bietet die Sockets die Du suchst.
    Ist OpenSource und frei verwendbar (wxWindows-License).

    http://www.sf.net/projects/cbccl


Anmelden zum Antworten