AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi UDP Socket verbindung?
Thema durchsuchen
Ansicht
Themen-Optionen

UDP Socket verbindung?

Ein Thema von Ganjaaa · begonnen am 23. Jan 2009 · letzter Beitrag vom 26. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Ganjaaa

Registriert seit: 5. Apr 2007
9 Beiträge
 
#1

UDP Socket verbindung?

  Alt 23. Jan 2009, 13:39
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:
$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);
      }
So das ich den datenblock "\xFE\xFD\x00\x10\x20\x30\x40\xFF\xFF\xFF\x01" sende und dann in $info die antwort erhalte

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
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: UDP Socket verbindung?

  Alt 23. Jan 2009, 13:45
hi,

nutzt du vista x64 ?
weil da schaffe ich es auch mit den indys einen bluescreen zu provozieren.

gruß
reli
  Mit Zitat antworten Zitat
Ganjaaa

Registriert seit: 5. Apr 2007
9 Beiträge
 
#3

Re: UDP Socket verbindung?

  Alt 23. Jan 2009, 15:07
Ähhh ja ^^ Vista Business Edition (64bit)
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#4

Re: UDP Socket verbindung?

  Alt 23. Jan 2009, 15:16
Wenns die Indys nicht tun, vielleicht funktionierts ja mit Synapse?
http://www.ararat.cz/synapse/doku.php/
  Mit Zitat antworten Zitat
Ganjaaa

Registriert seit: 5. Apr 2007
9 Beiträge
 
#5

Re: UDP Socket verbindung?

  Alt 23. Jan 2009, 15:36
Ähm ich lese da schon groß in der Überschrift "TCP/IP" aber ich brauche eine UDP verbindung
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#6

Re: UDP Socket verbindung?

  Alt 23. Jan 2009, 15:38
Zitat von Ganjaaa:
Ähm ich lese da schon groß in der Überschrift "TCP/IP" aber ich brauche eine UDP verbindung
http://www.ararat.cz/synapse/doku.php/features
Zitat:
Supports TCP, UDP, ICMP and RAW protocols.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: UDP Socket verbindung?

  Alt 23. Jan 2009, 21:06
In dem Thread hatte ich mal eine kleine (auf WIN-API basierende) UDP-Komponente geschrieben.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Ganjaaa

Registriert seit: 5. Apr 2007
9 Beiträge
 
#8

Re: UDP Socket verbindung?

  Alt 24. Jan 2009, 01:35
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;
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: UDP Socket verbindung?

  Alt 24. Jan 2009, 08:40
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
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: UDP Socket verbindung?

  Alt 24. Jan 2009, 11:41
@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:
//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;
alles ungetestet
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  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 16:38 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