Zu den Aufzeichnungen der tutorials.de-Live-Workshops
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
1143
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    HarryXVI HarryXVI ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    108
    Hallo,
    ich schreibe an einem Programm, wo sich zwei Computer gegenseitig Nachrichten schicken sollen. Beide Computer führen dasselbe Programm aus (onCreate-Methode):
    Code :
    1
    2
    3
    4
    5
    
    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 :
    1
    
    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?
     

  2. #2
    HarryXVI HarryXVI ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    108
    Jetzt tut sich ein neues Problem auf: Zu Beginn wird ein Server-Socket auf dem PC, wo man das Programm ausführt, initialisiert.
    Code :
    1
    2
    3
    4
    
    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?
     

  3. #3
    Avatar von sheel
    sheel sheel ist gerade online Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    3.991
    Ist der Firewall im Weg? Port schon belegt?
     

  4. #4
    HarryXVI HarryXVI ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    108
    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?
     

  5. #5
    HarryXVI HarryXVI ist offline Mitglied Gold
    Registriert seit
    Apr 2008
    Beiträge
    108
    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.
     

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 12.03.09, 13:19
  2. Antworten: 2
    Letzter Beitrag: 30.01.08, 10:24
  3. Antworten: 2
    Letzter Beitrag: 29.01.08, 14:59
  4. Antworten: 1
    Letzter Beitrag: 04.04.06, 20:06
  5. Antworten: 2
    Letzter Beitrag: 27.04.05, 10:56