WinSocket Multiserverfähig machen



  • Hi Leute,
    wie kann ich es anstellen, das ich den Winsocketserver Multiserver fähig mache?
    D.h. ich möchte wenn ich mich mit nem Client verbinde ne verbindung behalten und wenn ich den Client beende, möchte ich das der Server trotzdem offen bleibt,so das ich mich wieder verbinden kann. Und am besten wär es noch wenn der Server mehrere Verbindungen von Clients gleichzeitig annimt, wie geht das??
    Danke



  • 😕 😕 Ich verstehe nur Bahnhof was du willst.

    Ein WinSockServer = Multiserver ?

    Ein Server wartet auf eine Verbindung.
    Ein Client verbindet sich.

    Sollte der Client die Verbindung unterbrechen kann man im Source des Servers wieder auf Warten gehen.



  • genau, nur ich möchte wissen wie das geht, das der Server wieder wartet!!
    Und das der Server auch mehrere Verbindungen gleichzeitig zulässt!



  • damit der wieder auf ne verbindung wartet laesst du das accept in
    einer endlosschleife laufen.
    soll der server mehrere client gleichzeiting "bedienen" musst du einen thread
    erzeugen, der sich um den client kuemmert.
    der haupt-thread wartet weiter mit accept.
    (pseudocode)

    while( true )
    {
       Socket client = server_socket.accept();
       // starte thread
       thread.start( client );
    }
    


  • Hi!
    Also ich denke, dass geht mit dne WSA Sockets einfacher. Einfach ein WSAStartup und dann kannst du in - falls z.B. WinApi - MainWndProc die einzelnen Requests abfangen und drauf antworten.

    mfg



  • Da wir hier aber in der MFC sind, THREADS...!!! 😉



  • hm ah das mit dem das der Server offen bleibt klappt ja, nur das komische, ich kann jetzt vom Client nur einmal etwas senden, den Rets nimmt der Server nicht mehr an..
    hier die while Schleife:

    while(rc1!=SOCKET_ERROR)
    	{
    		sc->accept1();
    		recvText = sc->SocketRecv(0);
    		printf("%s\n",recvText);	
    		if(recvText[2]=='a')
    		{
    			printf("Es wurde eine A gesendet");
    		}
    	}
    


  • versuch dir mal die arbeitsweise des programms vorzustellen...
    dann sollte es ja klar sein.
    nach dem accept wartet der server darauf, dass ihm ueber
    das socket "sc" etwas gesendet wird; danach wartet er auf eine
    neue verbindungsanforderung....



  • Mit Threads sind wir hier auch falsch.

    MFC hat eine Klasse die sich CAsyncSocket nennt.

    Bsp. auch wenn es nicht perfect ist: www.mut.de -> leseecke -> VC++ 6 in 21 Tagen

    Um mehrere Clienten zu bedienen muss man keine Threads starten sondern den Clientsocket nach dem Connect in einem Objekt speichern. Sollte eine Nachricht reinkommen duchsucht man dann welcher Client es war. (Dies kann man dann vieleicht in einen Thread legen)



  • 😉


Anmelden zum Antworten