![]() |
UDP Socket verbindung?
Hallo also ich versuche schon seit geraumer zeit eine UDP (ja ich meine auch UDP) verbindung zu einen Server zu bekommen.
Das problem ist das ich das irgendwie trotz googlen ned rausbekommen kann mir einer helfen In PHP bekomme ich sowas hin das sieht dann so aus
Delphi-Quellcode:
So das ich den datenblock "\xFE\xFD\x00\x10\x20\x30\x40\xFF\xFF\xFF\x01" sende und dann in $info die antwort erhalte
$sock = @fsockopen("udp://".$host, 29900);
if($sock != false) { socket_set_timeout( $sock, 0, 500000 ); @fwrite($sock, "\xFE\xFD\x00\x10\x20\x30\x40\xFF\xFF\xFF\x01"); $info = @fread($sock,4096); $info .= @fread($sock,4096); fclose($sock); } kann mir einer damit evt helfen mit Indy UDPClient hatte ichs schon versucht aber da stürzt mein pc immer ab kann sein das ich was falsch mache ^^ danke Ganjaaa |
Re: UDP Socket verbindung?
hi,
nutzt du vista x64 ? weil da schaffe ich es auch mit den indys einen bluescreen zu provozieren. gruß reli |
Re: UDP Socket verbindung?
Ähhh ja ^^ Vista Business Edition (64bit)
|
Re: UDP Socket verbindung?
Wenns die Indys nicht tun, vielleicht funktionierts ja mit Synapse?
![]() |
Re: UDP Socket verbindung?
Ähm ich lese da schon groß in der Überschrift "TCP/IP" aber ich brauche eine UDP verbindung
|
Re: UDP Socket verbindung?
Zitat:
![]() Zitat:
|
Re: UDP Socket verbindung?
In
![]() |
Re: UDP Socket verbindung?
also sirius deine komponete schaut klasse aus nur bin ich glaube ich zu doof damit umzugehen
hier das habe ich soweit aber irgendwie kommt immer nen fehler xD
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var sock: TUDP_Socket; buffer: String; buf: array[0..8096] of Byte; begin sock := TUDP_Socket.Create(nil); try sock.RemoteHost := '69.12.76.145'; sock.RemotePort := 29900; sock.SocketMode := smEvent; sock.Open; buffer := '\xFE\xFD\x00\x10\x20\x30\x40\xFF\xFF\xFF\x01'; sock.Send(buffer,length(buffer)); sock.Recv(buffer,8096); sock.Close; finally sock.Free end; end; |
Re: UDP Socket verbindung?
Probier mal
sock.Send(buffer[0],length(buffer)); sock.Recv(buffer[0],8096); Grund: Liest du aus buffer statt buffer[0], wird von der Adresse des Zeigers aus gelesen, nicht von der Adresse des ersten Elements aus. Gleiches beim Lesen. Allerdings ist dein Buffer zu klein um 8096 bytes zu speichern. Vorher solltest du mit SetLength(buffer, 8096) für den nötigen Platz sorgen. Wieso eigentlich 8096? ich hätte 8192 oder 4096 erwartet :gruebel: |
Re: UDP Socket verbindung?
@inherited
Er hat zwar oben auch ein Array definiert, benutzt aber nur den String. Deswegen ist es buffer[1] (weil der String als einzige Ausnahme bei 1 anfängt) @ganjaaa (neben dem oben erwähnten noch folgendes:) Du hast smEvent als SocketMode angegeben. Dies bedeutet, dass recv zumeist nichts empfangen wird, weil zu de Zeitpunkt noch nichts da ist. Dein Programm ist schneller als das Netz. Um die Funktionalität von PHP hinzubekommen musst du nur auf smBlocking stellen. Dann wartet recv bis auch etwas da ist. Allerdings ist diese funktionalität bei Desktopanwendungen nicht üblich. Denn, wenn es im Netz mal wieder länger dauert, friert dein Programm bei recv ein. Gleiches gilt, wenn gar nix zurückkommt. Deswegen war smEvent gar nicht so falsch. Du musst allerdings jetzt noch das Ereignis onReceiving mit einer Methode belegen und dort kannst du dann recv aufrufen.
Delphi-Quellcode:
alles ungetestet
//Fsock würde ich als Feld in die Klasse legen und in FormCreate bzw. Formdestroy erstellen und löschen
procedure TForm1.Button1Click(Sender: TObject); var buffer: String; begin //das kan auch schon woanders vorbelegt werden FSock.onReceiving:=RecvSock; Fsock.RemoteHost := '69.12.76.145'; Fsock.RemotePort := 29900; Fsock.SocketMode := smEvent; Fsock.Open; buffer := '\xFE\xFD\x00\x10\x20\x30\x40\xFF\xFF\xFF\x01'; Fsock.Send(buffer[1],length(buffer)); end; procedure TForm1.RecvSock(Sender: TObject); var buffer: String; len:Integer; begin setlength(buffer,8192); len:=FSock.recv(buffer[1],8192); setlength(buffer,len); showmessage(buffer); FSock.close; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 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-2025 by Thomas Breitkreuz