1,593
社区成员
发帖
与我相关
我的任务
分享
type
TSendrec = packed record
msg: string[30];
//msg: string[1024];
end;
procedure TForm2.Button1Click(Sender: TObject);
var
Sendrec: TSendrec;
buffer:array [0..2048] of Char;
begin
Sendrec.msg := Edit2.Text;
CopyMemory(@buffer, @Sendrec, SizeOf(Sendrec));
IdUDPClient.SendBuffer(Edit1.Text, 5930, RawToBytes(buffer, sizeof(buffer)));
Memo1.Lines.Add('My -> ' + Edit1.Text + ': ' + Sendrec.msg)
end;
procedure TForm2.IdUDPServerUDPRead(AThread: TIdUDPListenerThread;
AData: TBytes; ABinding: TIdSocketHandle);
var
Sendrec: TSendrec;
buffer:array [0..2048]of Char;
begin
BytesToRaw(AData, buffer, SizeOf(buffer));
CopyMemory(@Sendrec, @buffer, SizeOf(Sendrec));
Memo1.Lines.Add(ABinding.IP + ' -> My: ' + Sendrec.msg);
end;
type
TSendrec = packed record
msg: Array of Char;
end;
可以正常发送,但是接收的时候,就会报错,不清楚具体应该怎么写CopyMemory(@Sendrec.msg[0], @buffer, Length(Sendrec.msg));
CopyMemory那行改成这样
procedure TForm2.IdUDPServerUDPRead(AThread: TIdUDPListenerThread;
AData: TBytes; ABinding: TIdSocketHandle);
var
Sendrec: TSendrec;
buffer:array [0..2048] of Char;
str:string;
i:integer;
begin
SetLength(Sendrec.msg, SizeOf(buffer));
BytesToRaw(AData, buffer, SizeOf(buffer));
CopyMemory(@Sendrec, @buffer, SizeOf(Sendrec));
for I := 1 to Length(Sendrec.msg) do
begin
str := str + Sendrec.msg[i];
end;
Memo1.Lines.Add(ABinding.IP + ' -> My: ' + str);
end;