000
02.09.2003, 22:10 Uhr
~Philipp
Gast
|
Hi Leute,
ich habe ein ordentliches Problem mit der Netzwerkprogrammierung, habe die vor etwa einer Woche mal angefangen, aber ich bekomme das doch partout nicht richtig hin...
Habe bis jetzt leider nur das Kapitel 20 von "Visual C++6 in 21 Tagen, Markt&Technik" mit dem Thema "Internet und Netzwerkprogrammierung" gelesen, das ist eindeutig zu wenig wie ich merke.
Jedenfalls habe ich mir vorgenommen einen Chat zu programmieren. Als System habe ich mir das halt so vorgestellt, dass es einen ChatServer und mehrere ChatClients gibt. Der ChatServer startet auf einem durch den Benutzer bestimmten Port einen Socket, und der Client connected dann ersteinmal an diesen Socket. Der ChatServer besitzt eine Liste weiterer Sockets, und er ordnet jedem Client der sich über den "Basissocket" verbinden will einen Socket aus dieser Liste zu. Ersteinmal vorab, das System sollte doch so funktionieren oder?
Mein Problem ist nun, dass ich es nicht schaffe, ein Verbindung zwischen Client und Server herzustellen! Ich schilder euch einfach mal kurz den Ablauf eines versuchten Verbindungsaufbaus:
1) ChatServer : StdSocket.Create(Port) sowie StdSocket.Listen(), StdSocket ist der Socket der nachher die Verbindunganforderung an die anderen Sockets umleitet. Der Schritt klappt (wenn ein korrekter Port übergeben wird) immer problemlos. 2) ChatClient : UserNetSocket.Create() sowie UserNetSocket.Connect(IP,Port). Connect liefer mit immer den Fehler "WSAEWOULDBLOCK". In der MSDN steht dazu folgendes: a)"If this indicates an error code of WSAEWOULDBLOCK, and your application is using the overridable callbacks, your application will receive an OnConnect message when the connect operation is complete." sowie b) "WSAEWOULDBLOCK The socket is marked as nonblocking and the connection cannot be completed immediately. ". Ich hab da jetzt verstanden, dass es einfach etwas länger dauert die Verbindung aufzubauen, ich also mit meiner Anwendung warten muss bis die Verbindung aufgebaut worden ist, was durch den Aufruf der Funktion OnConnect() bestätigt werden soll. 3) ChatClient: UserNetSocket.OnConnect wird aufgerufen. nErrorCode ist gleich 0, laut MSDN heißt das OnConnect wurde erfolgreich ausgeführt. Schön und gut, angeblich steht die Verbindung(oder?).
So, das Problem zeigt sich jetzt wenn ich Text senden will. Angeblich ist ja jetzt der Socket der ChatClient Anwendung mit einem der Sockets im Socketarray der ChatServer Anwedung verbunden, und der Datentransfer sollte klappen. Wenn ich jetzt aber dem Socket im Client sage, er solle Text schicken(halt per Send(...) Befehl, dann funktioniert das nicht. Die funktion OnReceive des mit dem Socket der ClientAnwendung verbundenen Sockets wird noch nichtmal aufgerufen, also schlägt der Datentransfer da ja irgendwie fehl. Die Frage ist halt nur, warum?
Ein paar Hilfen :
1)Wenn ich in der Eingabeaufforderung "netstat" eingebe und meine Anwendungen angeblich eine Verbindung aufgebaut haben, dann sieht man das auch(Bsp mit Port 2555):
Proto Lokale Adresse Remoteadresse Status TCP philipp:2555 philipp:3403 HERGESTELLT TCP philipp:3403 philipp:2555 HERGESTELLT
2)Egal welchen Text ich sende, auf dem ChatServer wird zu keiner Zeit( nicht von StdSocket und nicht von einem Socket des Arrays) die Funktion OnReceive aufgerufen.
Wüsste nun gerne warum er mir einerseits per OnConnect sagt das die Verbindung aufgebaut wurde, ich dann aber andererseits davon nichts merke.
Wenn ihr noch irgendwelche Tutorials habt, die sich mit MFC und Netzwerkprogrammierung befassen, nur her damit
Danke schonmal für die beantwortung meiner Fragen.
Philipp |