Mehrere Clients?



  • Hallo,

    ich beschäftige mich jetzt schone eine Weile mit der Socket Programmierung. Erst habe ich nur normale Konsolenprogrammierung gemacht. Jetzt möchte ich aber MFC Programmieren und da ebenfalls Sockets.

    Ich habe jetzt auch schon ein Server programmiert der einen Client akzeptiert und seine Daten empfängt. Ich möchte aber gern das sich mehrere Clients mit dem Server verbinden können und diese Daten senden könenn wie sie wollen.

    Bei der Socketprogrammierung gibt es ja die select() Funktion um soetwas zu händeln. Ich habe gelesen das es soetwas auch bei MFC gibt, nennt sich AsyncSelect. So richtig weiß ich aber nicht wie ich dieses jetzt in mein Projekt unterbringen muss.

    Hat eventuell jemand Codebeispiele?

    Hier mal meine Memberfunctions für OnAccept und OnReceive

    void CFMS_CDlg::OnAccept()
    {
    	CString strIP;
    	UINT port;
    
    		if(m_sListener.Accept(m_sConnected))
    		{	
    
    			m_sConnected.GetSockName(strIP, port);
    
    			UpdateData(FALSE);	
    		}
    		else
    		{
    			MessageBox(_T("Can't accepted client !"), _T("Warning"),MB_ICONWARNING | MB_OK);
    		}
    
    }
    
    void CFMS_CDlg::OnReceive()
    {		
    	char *Buf = new char[256];
    	CString strData;
    	int i;
    
    	i = m_sConnected.Receive(Buf,256);
    
    	if(i == SOCKET_ERROR)
    	{
    		MessageBox(_T("No Data received!"), _T("Error"),MB_ICONERROR | MB_OK);
    	}
    	else
    	{
    		Buf[i] = NULL;
    		strData = Buf;
    
    		m_receiveddata.Insert(m_receiveddata.GetLength(),strData);
    		m_receiveddata.Insert(m_receiveddata.GetLength(),_T("\r\n"));
    		UpdateData(FALSE);
    
    		delete Buf;
    	}
    
    }
    

  • Mod

    Die Nutzung von Google ist Dir bekant?
    http://lmgtfy.com/?q=mfc+socket+Accept

    Erster Link führt Dich sofort zu einer Artikel Reihe bzgl. MFC in Codeproject!



  • Ja mir ist Google bekannt und ich habe es auch genutzt.
    Speziell den ersten Link habe ich genutzt und nach diesem meinen Server erstellt.

    Trotzdem habe ich aber keine elegant Lösung gefunden um mehrere Clients mit dem Socket verbinden zu lassen und deren Daten dann empfangen zu können, egal wie sie kommen.
    Ich weiß das vielleicht viele hier etwas fragen bevor sie sich überhaupt irgendwelche Mühen machen selbst zu suchen. Das ist allerdings nicht meine Art.

    Das etwas magere Kommentar bei Codeproject war nicht unbedingt sehr hilfreich um beliebig viele Clients mit dem Server verbinden zu lassen. Das habe ich auch schon vorher gesehen 😉

    Ich würde es auch anders machen aber das Problem ist, sobald ich den Button zum "listen" drücke blockiert das gesamte Dialogfenster. Vielleicht gibt es da eine Möglichkeit das es nicht blockiert. Diese ist mir aber leider nicht bekannt.

    Für einen Tip wäre ich sehr dankbar.

    Gruß :xmas1:


  • Mod

    Wo ist ds Problem?
    Dann musst Du m_sConnected dynamisch machen. Du kannst die entsprechende Verbindung benutzen und einfach einen neen Accept erhalten...

    Aber Accept kann ja beliebig oft aufgerufen werden und damit beliebig viele "m_sConnected" Objekte "bestücken".

    Vom Prinzip etwa so wie hier gezeigt (obwohl der Code nicht vollständig ist):
    http://www.codeproject.com/Articles/9330/Simple-CSocket-Server-Application-Support-Multiple

    PS: Ja auch diesen Link findet man mit Google... 😉


Anmelden zum Antworten