Noch nen Problem mit CAsyncSocket



  • Ich wollte mal ein kleines Chat Programm schreiben, also eine Server Anwendung und eine Client Anwendung.
    Die Client Anwendung funktioniert auch bestens, aber ich habe noch Probleme mit der Server Version.
    Hier ist mal mein Code:

    Server Klasse:

    CServer::CServer(){
    cout << (const TCHAR*)"CServer Konstruktor" << endl;
    m_sClient.SetParentClass(this);
    m_sServer.SetParentClass(this);
    m_sServer.Create(12345);
    m_sServer.Listen();
    
    };
    
    void CServer::Loop(){
    
    	/*
    	WM_USER+1=Accept
    	WM_USER+2=Receive
    	WM_USER+3=Send
    	WM_USER+4=Close
    	*/
    	MSG msg; 
    
    	while(true){
    		while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){ 
    
    			switch(msg.message){ 
    			case WM_USER+1:
    			cout << (const TCHAR*)"ankommende Verbindung" << endl;
                m_sServer.Accept(m_sClient);   
    			} 
    		} 
    
    	}
    }
    

    Meine abgeleitete Klasse von CAsyncSocket:

    MySocket::MySocket()
    {
    }
    
    void MySocket::SetParentClass(CWinApp *parent){
    	m_parent=parent;
    }
    MySocket::~MySocket()
    {
    }
    
    /////////////////////////////////////////////////////////////////////////////
    // Member-Funktion MySocket 
    
    void MySocket::OnAccept(int nErrorCode) 
    {
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    
    	PostMessage(NULL,WM_USER+1,0,0);
    	//m_parent->cout << (const TCHAR*)"Message erhalten" << endl;
    	//CAsyncSocket::OnAccept(nErrorCode);
    }
    
    void MySocket::OnClose(int nErrorCode) 
    {
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    	PostMessage(NULL,WM_USER+4,0,0);
    	CAsyncSocket::OnClose(nErrorCode);
    }
    
    void MySocket::OnReceive(int nErrorCode) 
    {
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    	PostMessage(NULL,WM_USER+2,0,0);
    	CAsyncSocket::OnReceive(nErrorCode);
    }
    
    void MySocket::OnSend(int nErrorCode) 
    {
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    	PostMessage(NULL,WM_USER+3,0,0);
    	CAsyncSocket::OnSend(nErrorCode);
    }
    

    Ich habe das ganze mit meinem Client und mit Telnet getestet, es kommt aber keine Verbindung zustande.
    Habe ich jetzt etwas falsch gemacht bei der Verwendung des Sockets oder in der Message Queue?
    Die Anwendung ist cmd-basiert mit MFC Unterstützung und mit MSVC++ erstellt.

    Wäre nett wenn mir damit jemand helfen könnte...;)

    edit: Ah und ja, ich rufe die Loop() Funktion nach der Erstellung der Klasse natürlich auf. Wenn ich eine Message mit PostMessage direkt in dem Loop erstelle, wird sie auch bearbeitet.

    edit2: Habe herausgefunden dass ich erst noch AfxSocketInit(); ausführen muss... Jetzt kann ich zwar eine Verbindung herstellen, aber irgendwie wird das cout nicht ausgeführt...die Server Klasse scheint die Message also nicht zu bearbeiten...



  • Kann mir niemand helfen? 😞
    Für die Verwendung von Sockets muss ich doch nur afxsock.h bei #include reinpacken und diese AfxSocketInit() Funktion aufrufen oder fehlt da sonst noch was?


Anmelden zum Antworten