Entwickler-Ecke
Internet / Netzwerk - IdUDPClient - Daten empfangen ?
OlafSt - Fr 13.11.09 17:48
Titel: IdUDPClient - Daten empfangen ?
Hallo Leute,
ich seh mal wieder den Wald nicht...
Simples Problem: Ich will mit einer Anwendung kommunizieren via UDP. Ich benutze hier Delphi2009 und Indy10, ergo eine TIdUDPClient-Kompo.
Daten senden an die andere Anwendung funktioniert wunderbar. Doch diese Anwendung schickt mir eine Antwort zurück - die ich nie erhalte.
Da es keine Events im TIdUDPClient gibt, die mir signalisieren, das ich was bekommen habe, polle ich per Timer-Event. Aber ich erhalte nie Daten. Was mache ich falsch ?
Wenn Verweise auf andere UDP-Komponenten als Indy10, dann nur welche, die auch mit D2009 laufen ;)
Die entscheidenden Codestellen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TTUT_Main.IdUDPClient1Connected(Sender: TObject); begin IPStatus.FillColor:=clLime; end;
procedure TTUT_Main.IdUDPClient1Disconnected(Sender: TObject); begin IPStatus.FillColor:=clRed; end;
procedure TTUT_Main.IdUDPClient1Status(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); begin RzMemo1.Lines.Add('UDPClient: '+AStatusText); end;
procedure TTUT_Main.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; AData: TBytes; ABinding: TIdSocketHandle); var s: string; i: integer; begin s:=''; for i := 0 to Length(AData) - 1 do s:=s+chr(AData[i]); RzMemo1.Lines.Add('Received: '+s); end; |
Xentar - Sa 14.11.09 00:29
Mich würde ja mal schwer der Aufruf interessieren, wie du ihn aus dem Timer heraus gestaltest..
Delphi-Quelltext
1:
| procedure TTUT_Main.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; AData: TBytes; ABinding: TIdSocketHandle); |
und vor allem, was du als Parameter übergibst..
OlafSt - Mo 16.11.09 10:03
Oh... Das UDPServerRead ist ein Relikt aus der Testphase und nur mehr ein ignorierenswerter Trümmer.
Der Timer-Event sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TTUT_Main.Timer1Timer(Sender: TObject); var s: string; begin if not IDUDPClient1.Connected then exit;
s:=IdUDPClient1.ReceiveString(10); if s='' then exit; RzMemo1.Lines.Add('Received: '+s);
end; |
Xentar - Mo 16.11.09 10:39
Aber der Client ist verbunden, und es werden auch Daten hingeschickt? Sicher?
OlafSt - Mo 16.11.09 12:10
Ja, das ist er. Ich sehe auf der anderen Seite ja auch, wie meine Daten ankommen.
Nur die zurückgeschickte Antwort kommt nie an. Möglicherweise ist ja auch am anderen Ende was falsch (ist ein 30-Sekunden-Hack, den ich zusammengeschustert habe. Nur ein TIdUDPServer aufs Formular geschubst und ein UDPRead-Eventhandler gebastelt):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread; AData: TBytes; ABinding: TIdSocketHandle); var i: Integer; s: string; begin s:=''; for i := 0 to Length(AData)-1 do s:=s+chr(AData[i]); Memo1.Lines.Add(Format('Received from %s:%d: %s',[ABinding.PeerIP, ABinding.PeerPort, s]));
ABinding.SendTo(ABinding.Peerip, ABinding.PeerPort, AData); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!