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?