AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Udpsocket onReceive Ereignis wird nicht ausgelöst?
Thema durchsuchen
Ansicht
Themen-Optionen

Udpsocket onReceive Ereignis wird nicht ausgelöst?

Ein Thema von richard_boderich · begonnen am 7. Jul 2008 · letzter Beitrag vom 10. Jul 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#1

Udpsocket onReceive Ereignis wird nicht ausgelöst?

  Alt 7. Jul 2008, 12:08
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 ?
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?

  Alt 7. Jul 2008, 13:26
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
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#3

Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?

  Alt 7. Jul 2008, 13:55
@Sirius

Danke erstmal für deine Antwort. Funktioniert dies auch mit udpsocket1.ReceiveBuf()? Ich habe es damit versucht, jedoch leider ohne Erfolg.

mfG Richard
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?

  Alt 7. Jul 2008, 14:51
Ui, bei näherem hineinschauen in die Komponente kann ich kaum glauben, dass hier irgendetwas funktioniert
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#5

Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?

  Alt 7. Jul 2008, 16:10
@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;
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?

  Alt 7. Jul 2008, 17:05
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 von winSDK:
For a connectionless socket (for example, type SOCK_DGRAM), the operation performed by connect is merely to establish a default destination address which will be used on subsequent send/WSASend and recv/WSARecv calls. Any datagrams received from an address other than the destination address specified will be discarded. If the address field of the name structure is all zeroes, the socket will be "dis-connected." Then, the default remote address will be indeterminate, so send/WSASend and recv/WSARecv calls will return the error code WSAENOTCONN. However, sendto/WSASendTo and recvfrom/WSARecvFrom can still be used. The default destination can be changed by simply calling connect again, even if the socket is already "connected". Any datagrams queued for receipt are discarded if name is different from the previous connect.

Ich schaue nachher nochmal genauer rein.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#7

Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?

  Alt 7. Jul 2008, 17:33
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
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?

  Alt 7. Jul 2008, 21:10
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#9

Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?

  Alt 8. Jul 2008, 10:18
@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
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
309 Beiträge
 
Delphi 12 Athens
 
#10

Re: Udpsocket onReceive Ereignis wird nicht ausgelöst?

  Alt 8. Jul 2008, 11:01
Zitat von richard_boderich:
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.
Z.B. WSockets v.1.20 von Robert T. Palmqvist. Download und kurze Beschreibung hier. Von mir benutzt in mehreren Projekten unter D7.

Gruß,
Christoph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz