Thema: Delphi UDP Socket verbindung?

Einzelnen Beitrag anzeigen

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, 10: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