Socket, mehrere Clients

UInt

Mitglied
Hallo,
ich versuche ein Testprogramm für einen Server mit der MFC zu programmieren und möchte damit mehrere Clients simulieren. Auf die Serversoftware habe ich keinen Zugriff. Die Kommunikation erfolgt über TCP.

Wie kann ich mehre Client-Verbindungen mit dem Server aufbauen?

Einen Client habe ich geschafft:

.h
Code:
CSocket     m_Socket;  // CAsyncSocket

.cpp
Code:
void CServer::openTCP(TCHAR* szIPAddress)
{
	m_Socket.Create();
	m_Socket.Bind(6042);

	m_Socket.Connect(szIPAddress, 6042)
}

Soweit ich verstehe, brauche ich mehrere Sockets um mehrere Clients zu erzeugen. Wie erzeuge ich sie von der Clientseite? Und wie kann ich dann Einzelne auswählen, um sie z.B. zu schließen? Im Internet habe ich zu diesem Thema nur gefunden, wie man etwas Ähnliches auf der Serverseite programmiert.
 
Könnte denn Folgendes eine Lösung sein?

.h
Code:
CSocket     *pm_Socket;    //<-----------------------------

.cpp
Code:
void CServer::openTCP(TCHAR* szIPAddress)
{
	pm_Socket -> new CSocket;     //<-----------------------------

	pm_Socket.Create();
	pm_Socket.Bind(6042);

	pm_Socket.Connect(szIPAddress, 6042)
	
}

Wie könnte man dann die einzelnen Sockets wählen, um sie getrennt zu behandeln (z.B. schließen, verschiedene Daten schicken, empfangen)?
 
also du benutz winsock2.h
oder die standart windows.h sockets

Also egal wo du must für jeden Cleint eine eigene Verbindung geben die nur für ihn da ist
ich hab dafür ne structur gebaut
Code:
struct st_adressen
{
    SOCKADDR_IN addr;
    bool besetzt;
    float x;
    float y;
    float z;
    float drehung;
    int aktion;
    int anz_aktion;        //gibt an wie offt die die aktion schon durch gefürt wurde
    bool schaden;
    
};

wenn nachricheten eingehen
Code:
rc=recvfrom(s,buf,1023,0,(SOCKADDR*)&remoteAddr,&remoteAddrLen);

prüffe ich von wemm die nachricht kommt
Code:
/ob der sender bekannt ist
        for(i=0;i<maxcleints;i++)
        {
            if(remoteAddr.sin_addr.S_un.S_addr==adressen[i].addr.sin_addr.S_un.S_addr)
            {
                wer=1;
                break;
            }
        }
        //neuen cleint entgegen nehmen
        //er ist net bekannt
...
das ist jetze nen beispiel für udp

aber wenn du es für sdp haben wilst hier ein funktionierendes Beispiel
http://www.c-worker.ch/

ist aber leider ohne klassen

Faller
 
Hi Faller,

danke für deine Antwort.

Ich benutze afxsock.h. Eigentlich das typische, was MFC anbietet.
Mein Problem habe ich doch mit pm_Socket -> new CSocket gelöst habe.
 
Wie könnte man dann die einzelnen Sockets wählen, um sie getrennt zu behandeln (z.B. schließen, verschiedene Daten schicken, empfangen)?

Hallo,

du musst die erzeugeten CSocket-Objekte in einer statischen (CSocket Array) oder dynamischen Liste (z.B. mit der Klasse CObList) speichern, damit du später darauf zugreifen kannst. Das musst du bei deiner jetzigen Lösung auf jeden Fall tun, damit du die mit "new" angelegten CSocket-Objekte auch wieder mit "delete" löschen kannst. Ansonsten hast du Memory Leaks.

Gruß
MCoder
 
Ja MCoder,
da hast du Recht. Bei der Lösung hilft mir nur die Liste. CobList ist eine gute Idee. Danke.:)
 

Neue Beiträge

Zurück