Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#1

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

  Alt 29. Aug 2011, 10:44
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!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (29. Aug 2011 um 12:47 Uhr)
  Mit Zitat antworten Zitat