Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Indy UDP: Nichts kommt an, Socket-Fehler oben drauf. (https://www.delphipraxis.net/162555-indy-udp-nichts-kommt-socket-fehler-oben-drauf.html)

Medium 29. Aug 2011 10:44


Indy UDP: Nichts kommt an, Socket-Fehler oben drauf.
 
Tach zusammen.
Da bisher keine Antworten da sind, traue ich mich mal die ursprüngliche Fragestellung zu ändern, da das eigentliche Problem wohl viel grundsätzlicher ist.
Ich nutze TidUDPClient und -Server für eine Suche meiner beiden Applikationen im LAN.
Problem 1: Der Server landet nie im UDPRead-Event, ergo kommt nichts bei ihm an.
Problem 2: Wenn ich statt eines Broadcasts direkt an eine IP sende (mit dem Client), wird das im UDPClient.ReceiveString() mit einem Socket Error 10054 "Connection closed by peer" quittiert, statt dass ich einfach auf den Timeout laufe.

Ich vermute hier also eher ein Problem mit meinem Client, bin aber was die Indys angeht noch recht grün hinter den Ohren, und hänge an dem Quatsch nun schon den gesamten Vormittag fest :(

Client-Applikation hat eine TidUDPClient auf dem Formular, und ich mache dort folgendes:
Delphi-Quellcode:
var
  ip, reply: string;
  i, port: Integer;
begin
  i := 1;
  repeat
    if Odd(i) then
    begin
      lblStatus.Caption := 'Versuch '+IntToStr(i)+' (LAN)';
      UDPClient.Broadcast(UDP_Server_Req_Ident, UDP_Server_Req_Port);
      reply := UDPClient.ReceiveString(ip, port, 1000);
    end
    else
    begin
      lblStatus.Caption := 'Versuch '+IntToStr(i div 2)+' (lokal)';
      UDPClient.Send('127.0.0.1', UDP_Server_Req_Port, UDP_Server_Req_Ident);
      reply := UDPClient.ReceiveString(ip, port, 1000);
    end;
    inc(i);
  until ((ip<>'') and (port<>0) and (copy(reply, 1, pos('|', reply)-1)=UDP_Server_Answer_Ident)) or (i>10);
Das ReceiveString() nach dem Broadcast läuft wie erwartet auf den Timeout, alles gut. Der Server läuft lokal, dürfte also via Broadcast auch nicht erreicht werden. Das nach dem Send() jedoch führt zu o.g. Fehler, und der Server sieht von diesem Paket auch nüscht. Firewall ist aus, und eine TCP Verbindung im selben Programm an anderer Stelle tut klaglos, auch zwischen Programmen auf gemeinsamem Host. Was mache ich hier verkehrt? In den ganzen Tutorials sah das alles nicht unähnlich aus, so dass ich im Moment ziemlich ratlos bin. Auch Ersetzen der localhost IP mit der tatsächlichen IP des Rechners brachte keinerlei Änderung.
Danke euch schonmal!

Medium 29. Aug 2011 12:48

AW: Indy UDP: Nichts kommt an, Socket-Fehler oben drauf.
 
Ich push das mal verfrüht hoch, da sich die Fragestellung geändert hat, wodurch das im Grunde ein neuer Thread ist. Die alte Frage ist damit erstmal obsolet (und auch weg :)).

Medium 29. Aug 2011 13:55

AW: Indy UDP: Nichts kommt an, Socket-Fehler oben drauf.
 
Großer Witz mal wieder. Test-Server erstellt, mit dem ging es dann, danach einfach die UDP Server Kompo aus dem eigentlichen Programm entfernt, einfach wieder neu aufs Formular gepackt, die selbe Read-Methode angehängt, und natürlich gehts. Oh sowas mag ich ja! Und ich finde mich sogar über den Broadcast, so dass ich den Horst garnicht bemühen muss.
Danke für's nicht Hauen für diesen eher sinnfreien Thread!

ChrisE 29. Aug 2011 14:30

AW: Indy UDP: Nichts kommt an, Socket-Fehler oben drauf.
 
Hallo Medium,

nur ganz kurz - der Port 1000 aus Deinem Beispiel gehört aber zu den "Well known ports. Ich würde Portnummern für eigene Zwecke empfehlen, die mindest oberhalb von Port 1023 sind - wenn nicht sogar oberhalb von Port 49151 (Registered Ports).

Gruß, Chris

EDIT: Asche auf mein Haupt - ich hab die 1000 falsch gelesen - einfach ignorieren - Sorry :-(

Medium 29. Aug 2011 15:14

AW: Indy UDP: Nichts kommt an, Socket-Fehler oben drauf.
 
Dennoch ein guter Hinweis! Die 1023 hatte ich noch im Hinterkopf, die registrierten allerdings nicht. Da bin ich doch gleich mal spontan von den 30000ern in >52000 gewechselt. Sicher ist sicher. :) Danke!

ChrisE 29. Aug 2011 15:21

AW: Indy UDP: Nichts kommt an, Socket-Fehler oben drauf.
 
Dann hatte ja mein Fehler :oops: doch etwas gutes :thumb:

Gruß, Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz