@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.