CSocket / CAsyncSocket
-
Moin...
Ich versuche grad eine Client/Server-Applikation mit CSocket/CAsyncSocket zu schreiben und hab da ein fieses Problem beim Connecten.Wenn ich connect bei meinem Client ausführe sagt die Server-Applikation immer nur INVALID_SOCKET wenn ich die Verbindung in OnAccept mit Accept annehmen will... Warum? Kann mir einer mal ganz genau sagen in welcher Reihenfolge da was passieren muss damit soeine Socket-Verbindung klappt?! Ich hab zwar diese Microsoft-Demo chatsrvr und chatter runtergeladen, angesehen und ausprobiert (in der demo gehts), aber ich kann da bei besten willen keinen unterschied zu meinem Programm festellen und trotzdem geht da nix...
gruß
-
grr... ich werkel 5 stunden rum, mach alles was geht und wo liegt der fehler? ich habs projekt so wies sein soll als DEBUG kompiliert... wenn man das als RELEASE kompiliert dann gehts dh ich muss da für DEBUG ein AssertValid einbauen... wer immer das im mfc verbockt hat ist ein verdammter schweinehund... GRRRRRR
gruß
-
zu früh gefreut... ich bekomm den dummen fehler ned weg und will ned immer im release-mode kompilieren... bäh... warum is das nur?!
-
Schau in den FAQ
-
Nunja... mein Problem ist nicht ganz das was du da geschrieben hast... es läuft im release-mode aber nicht im debug... das was ich geschrieben hab sieht ungefähr so aus:
void CListenSocket::OnAccept(int nErrorCode) { CCLientSocket* ClientSocket; ClientSocket = new CClientSocket(); ClientSocket->Create(); Accept(*ClientSocket); }
CClientSocket und ClistenSocket sind beide von CSocket abgeleitet. Die Funktion Accept versucht dann die Funktion CAsyncSocket::Accept aufzurufen. In der ersten Zeile dort steht:
BOOL CAsyncSocket::Accept(CAsyncSocket& rConnectedSocket, SOCKADDR* lpSockAddr, int* lpSockAddrLen) { ASSERT(rConnectedSocket.m_hSocket == INVALID_SOCKET); ...
Und dabei bricht der immer ab...
kA warum...Wenn ich in ClientSocket den Wert von m_hSocket ansehe ist der immer weitab von INVALID_SOCKET... also ist das ganze so ziemlich unsinnig, stört aber trotzdem... kann man das irgendwie umgehen oder so? Hab schon viele andere Programme gesehen, wo das nicht auftritt obwohl die fast genau geschrieben sind... bei denen kann ich das programm sogar so weit abändern bis da nurnoch diese zeilen wie oben im ersten absatz stehen und trotzdem geht das da... wenn hier noch was mit ungültigen werten arbeitet, dann ist in mfc nen dicker bug drin, da spätestens nach Create ein gültiger socket verfügbar sein muss... ausserdem hab ich das ganze schon über 100x im release-mode getestet und es gab nie einen fehler...
gruß