socket怎么接收记录型数据
type TUser = record
Name: string[16];
sex:string[2];
age:integer;
end;
var
user:TUser;
ClientSocket向ServerSocket发送socket.sendbuf(user,sizeof(user));
ServerSocket怎么接收这个记录型数据呢??
socket
[解决办法]
type TUser =Packed record
Name: string[16];
sex:string[2];
age:integer;
end;
Packed不能少,不然Record内存不是连续的
socket.sendbuf(buf,sizeof(user));
不管接还是发送 都是用一个buf:array of byte;
你要做的是将user写入buf 和从buf读出user
[解决办法]
Name: string[16];
sex:string[2];
age:integer;
改为
name:array[1..16]of char;
sex :array[1..2]of char;
age:integer;
这样内存就连续了,和传字符串没什么区别,就是前16为name,然后2位为sex,最后4位为整数。
[解决办法]
1,用Packed的目的是让分配内存以1字节为单位,不会的话Delphi将按一次4个字节的方式申请内存,不足4字节变量也会占4字节,就会造成不连续
2,string[]这个是可以用的,长度固定,与:array[]of char个我一样的效果。但string类型存入Record只是一个占4字节指针,因此不能用
3,用sendbuf和receivebuf 我来讲一下怎和把Record变成buf及buf变成record,代码如下
procedure TForm1.Button1Click(Sender: TObject);
type
Rec=packed record
a:Integer;
b:string[5];
end;
var
a:Rec;//要传入的Record
b:Rec;//接收的Record
buf:array [0..9] of Byte;
begin
a.a:=3;
a.b:='你好吧';
//将a写入buf
Move(a,buf,10);
//将buf读入b
Move(buf,b,10);
ShowMessage(IntToStr(b.a)+b.b);
end;