Socket-Connection

HarryXVI

Erfahrenes Mitglied
Hallo,
ich schreibe an einem Programm, wo sich zwei Computer gegenseitig Nachrichten schicken sollen. Beide Computer führen dasselbe Programm aus (onCreate-Methode):
Code:
Server := TServerSocket.Create(Start);
Server.Port := 78;
Server.Active := true;
Client := TClientSocket.Create(Start);
Client.Port := 78;

Der Kommunikationspartner wird im Laufe des Programms anhand seiner IP identifiziert:
Code:
Client.Host := gegner_ip;

Der Server ist ja bereits aktiv. Wenn ich nun den Client aktiviere (Client.Active := true; ), müsste dieser Client dem Server-Socket, also seinem Host, Nachrichten schicken können. Dann kommt auf der Empfänger-Seite jedoch der Windows-Error 10057:
A request to send or receive data was disallowed because the socket is not connected and (when sending on a datagram socket using sendto) no address was supplied.

Warum ist der Socket nicht verbunden? Was mache ich falsch?
 
Jetzt tut sich ein neues Problem auf: Zu Beginn wird ein Server-Socket auf dem PC, wo man das Programm ausführt, initialisiert.
Code:
Server := TServerSocket.Create(Start);
Server.Socket.OnClientRead := Empfangen;
Server.Port := 40;
Server.Active := true;

Wenn ich das Programm so auf einem anderen Rechner ausführe, kommt der Socket Error 10013: Der Zugriff auf einen Socket war aufgrund der Zugriffsrechte des Sockets unzuässig, auf API 'bind'.

Wie kann ich die Zugriffsrechte so einstellen, dass der Socket aktiv wird? Was muss ich ändern?
 
Das Problem hat sich durch eine Portänderung erledigt.

Nun ist es so: Eine Unit (Start), wo die Socket-Kommunikation klappt, zerstört ihre eigenen Sockets und erstellt ein neues Formular (Main). Diese neue Unit beinhaltet wieder einen Server- und einen Client-Socket, die sich über einen anderen Port unterhalten. Bei dem Versuch, eine Nachricht zu schicken, erscheint der Socket-Error 10049, d.h. die IP-Adresse, die beim Client als Host eingetragen ist, ist ungültig. Dies kann jedoch nicht sein, da es genau dieselbe Adresse ist, mit der in der Anfangsunit (Start) erfolgreich kommuniziert wurde.

Was ist da los?
 
Ich habe jetzt die Socket-Verbindung komplett in eine Unit gelagert. Somit entfällt die parallele Existenz von zwei Socket-Verbindungen, die wahrscheinlich zu diesem Fehler geführt hat.
 
Zurück