![]() |
Udpsocket onReceive Ereignis wird nicht ausgelöst?
Moin zusammen!
Ich habe hier ein kleines Problem mit der Udpsocket Komponente von Delphi7. Ich sende einen UDP Multikast und muss ein UDP Unicast Antwortpaket empfangen. Das Senden funktioniert und auch die Antwort kommt auch herein, (mit Wireshark überprüft) nur die Udpsocket Komponente löst kein OnReceive aus! Kann mir jemand sagen warum? Gibt es vielleicht ein generelles Problem mit dieser Komponente? mfG Richard //EDIT Also ich habe jetz mal ein wenig gegoogelt. Es scheint ein generelles Problem mit der UdpSocket Kompo zu geben. Auch der nicht feuernde OnReceive Event wird dort erwähnt. Kennt jemand eine Quelle mit weiteren Infos bzw. einem Workaround ? |
Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?
TUDPSocket bietet ein derartiges Ereignis nicht an. onRecieve wird ausgelöst, wenn du selber RecieveFrom aufrufst. Workarounds fallen mir spontan einige ein. Neben "anderen Komponenten verwenden" wäre da noch:
- mit WSAAsyncSelect selber ein Ereignis erzeugen - Die Komponente in einen Thread legen und blockierend recievefrom aufrufen - RecieveFrom in einem Timer aufrufen und dabei die Komponente auf nichtblockierend schalten |
Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?
@Sirius
Danke erstmal für deine Antwort. Funktioniert dies auch mit udpsocket1.ReceiveBuf()? Ich habe es damit versucht, jedoch leider ohne Erfolg. mfG Richard |
Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?
Ui, bei näherem hineinschauen in die Komponente kann ich kaum glauben, dass hier irgendetwas funktioniert :gruebel:
|
Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?
@Sirius
Kannst du bitte mal drüberschaun. onReceive wird trotzdem nicht gefeuert. Timer ist aktiv (10ms)! mfG Richard
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var udpstream:TStringStream; begin getmem(buffer,8192); udpstream:=TStringStream.Create(Suche+#13#10); udpsocket1.SendStream(udpstream); end; procedure TForm1.UdpSocket1Receive(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer); begin label1.Caption:='fired'; end; procedure TForm1.Timer2Timer(Sender: TObject); var bla:sockaddr_in; data:integer; begin bla:=udpsocket1.GetSocketAddr('192.168.0.1','0'); udpsocket1.receivefrom(buffer,sizeof(buffer), bla, data, 0); end; |
Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?
Du kannst ja mal das onError-Event nutzen und dann den String SyserrorMEssage(SocketError) ausgeben.
Bei mir sagt er, dass es keiner VErbindung zum Remotehost gibt, was für ein UDP-Socket ja völliger Blödsinn ist. Eigenartigerweise macht die Komponente ein Connect mit einem UDP Socket. Laut WinSDK ist das auch soweit ok, aber ein recv geht mit so einem Socket anscheinend nicht. Was auch immer das uns sagen will: Zitat:
Ich schaue nachher nochmal genauer rein. |
Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?
Also die Receivefrom Funktion liefert bei mir immer -1 zurück. Ja, hab mich auch schon gefragt, was das mit connect, disconnect usw. soll. UDP sollte doch ein Verbindungsloses Protokoll sein!
mfG Richard |
Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?
Ich würde sagen, schmeiß die Komponente weg und bastel dir ne neue. Bzw. nimm etwas anderes! Mehr fällt mir dazu nicht ein. Ich dachte im Laufe des Abends verstehe ich die Komponente noch. Aber auch alles was man korrigierend ändern müsste ist private deklariert und damit nicht änderbar. Und nötige Methoden, die zu ändern wären sind auch noch statisch.
Fazit: Ich verstehe es einfach nicht oder Borland hatte hier einen Praktikanten sitzen nach dem Motto: Wer braucht schon UDP. |
Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?
@Sirius
Hättest du da eventuell eine Empfehlung für mich? Aber bitte nicht die Indys! Die Komponente sollte klein, einfach und ohne viel Ballast sein. Selbst proggen würde ich nur im Notfall, falls sich nichts findet. mfG Richard |
Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?
Zitat:
![]() Gruß, Christoph |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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 by Thomas Breitkreuz