Dann geb ich mal meinen Code zum besten:
Der Server erstellt das Socket:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Server := TServerSocket.Create(Form1); Server.Port := 8954;
Server.Open; Server.OnClientRead := Form1.TServerSocketRead; Server.OnClientConnect := Form1.OnClientConnect; Server.OnClientDisconnect := Form1.OnClientDisconnect; users := TStringList.Create; users.Sorted := False; IPs := TStringList.Create; IPs.Sorted := False; |
Der Client erstellt das Socket:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Client := TClientSocket.Create(Form1); Client.Port := 8954; Client.Host := wert; Client.Open; Client.OnRead := Form1.TClientSocketRead; |
Wenn der Client connected:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.OnClientConnect(Sender: TObject; Socket: TCustomWinSocket); VAR verbindung: Integer; BEGIN IPs.Add(Socket.RemoteAddress); users.Add(Socket.RemoteAddress); verbindung := users.IndexOf(Socket.RemoteAddress); Server.Socket.Connections[verbindung].SendText('/logy' + #13); END; |
Bis hierhin funktioniert alles prima.
Wenn der client offline geht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.OnClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); VAR verbindung: Integer; BEGIN
verbindung := IPs.IndexOf(Socket.RemoteAddress); IPs.Delete(verbindung); users.Delete(verbindung);
Server.Socket.Connections[verbindung].Disconnect(0); Server.Socket.Connections[verbindung].Free;
END; |
Theoretisch könnte den Schluss auch draußen lassen (Nach dem Post über mir jedenfalls),
jedoch bekomme ich, wenn der Client nach dem Disconnect erneut versucht zu verbinden,
folgende Fehlermeldung (egal obs drinnen ist oder ob nicht):
"Windows-Socket-Fehler: Normalerweise darf jede Socketadresse (Protokoll, Netzwerk oder Anschluss) nur jeweils einmal verwendet werden (10048), auf API 'bind'"
Das spukt der Client aus. Der Server zeigt folgende Meldung an:
"Zugriffsverletzung bei Adresse 004261DE in Modul 'project1.exe'. Lesen von Adresse 1082E8CC"
Beim Compilieren bekomme ich keine Fehlermeldungen, da ist alles in Ordnung. Hoffe ihr könnt was damit anfangen und mir weiterhelfen.
Edit: Wenn ich die Fehlermeldung weckklicke und nochmal versuche zu connecten gehts irgendwie...
MfG ZO_orki