Hallo,
leider kann ich das nicht testen.
Habe "nur"
Indy 9 installiert.
Delphi-Quellcode:
procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle);
var
DataStringStream: TStringStream;
s: String;
data: TBytes;
begin
DataStringStream := TStringStream.Create(''); // <-- hier Haltepunkt setzen
try
DataStringStream.Write(AData, Length(AData));
DataStringStream.Position := 0; // eventuell noch die Position auf 0 setzten
UDPMemo.Lines.Add('Received "' + DataStringStream.DataString + '" from ' + ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort));
s := 'Replied from ' + UDPServer.Name + ' to "' + DataStringStream.DataString + '"';
SetLength(data, Length(s)-1);
move(s[1], data, Length(s)-1);
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, data);
finally
DataStringStream.Free;
end;
end;
Irgendetwas passt nicht bei der Übergabe des Bytearray in den StringStream.
Wahrscheinlich kann man das so nicht lösen.
Delphi-Quellcode:
procedure TUDPMainForm.UDPServerUDPRead(Sender: TObject; AData: TBytes; ABinding: TIdSocketHandle);
var
s: String;
dataString: String;
data: TBytes;
begin
dataString:=String(pchar(AData))
UDPMemo.Lines.Add('Received "' + dataString + '" from ' + ABinding.PeerIP + ' on port ' + IntToStr(ABinding.PeerPort));
s := 'Replied from ' + UDPServer.Name + ' to "' + DataString + '"';
SetLength(data, Length(s)-1);
move(s[1], data, Length(s)-1);
ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, data);
end;
.. so langsam gehen mir auch die Ideen aus.
Grüße
Klaus