hallöle!
ich habe ein mittelgroßes problem mit meinem TUdpSocket:
mein programm reagiert auf ereignisse und schickt daraufhin an bis zu 40 empfänger (von servern kann man nicht wirklich sprechen...) im netz jeweils ein UDP-paket.
da die events auch mit bis zu einer millisekunde auftreten können, erzeugt das ne ganze menge pakete.
das problem scheint nun zu sein, dass die ganze connecterei durch den socket ewig braucht, und damit eine ziemliche verzögerung verursacht.
und das bringt mich gleich zur nächsten verständnisfrage:
UDP ist ja ein verbindungsloses protokoll.
dass ich einen socket, um ihn zu nutzen, "active" setzen muss, sehe ich ja noch ein.
ein open als übergeordnete stufe dazu mag ja in gottes namen auch sein.
wozu aber muss ich einen verbindungslosen socket verbinden(connect) ?!
dazu kommt nämlich, dass anscheinend jedesmal, wenn ich etwas schicke, ein anderer localport gesendet wird (sagt mir wireshark).
wird der bei jedem connect geändert?
kann ich mit dem TUdpSocket auf eine weise verfahren, dass er mir quasi als "tunnel nach draußen" dient, wo ich einfach pakete rausschieben kann, ohne, dass er immer irgendwas an seiner verbindung macht?
ein bisschen code gibt's hier:
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:
| procedure schicken; type arrtyp=array[1..48] of byte; parrtyp=^arrtyp; var x,y:integer; z: array[1..12] of LongWord; inter:arrtyp; point:parrtyp; begin for x:=0 to 39 do begin if controller[x] then begin for y:=1 to 12 do z[y]:=Ausgabe[y+(x*12)] and sperre[y+(x*12)]; Udpout.RemoteHost:='192.168.0.'+inttostr(x+129); Udpout.RemotePort:='1000'; point:=@z; inter:=point^; Udpout.Connect; Udpout.SendBuf(inter, 48); end; end; end; |
das spiel mit point, inter und z ist nur dazu da, um das casten nach char zu beschleunugen.
ich freue mich auf viele, hilfreiche antworten!
