1,594
社区成员
发帖
与我相关
我的任务
分享
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;
[/quote]
解决了就好,不过delphi的静态数组和动态数组取地址,是一个知识点,可以看下我之前总结的文章。
http://pb.itsong.com/2009/01/delphi_is_an_array_of_array_name_is_the_first_address.html
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;