socket数据包头、包体如何定义
改 EmpMessage 结构 ,加上 GRECORDCOUNT :BYTE 一项
EmpMessage=record
ename:string[12];
phone:string[20];
address:string[100];
sendtime:string[30];
memberid:string[9];
orderid:string[13];
computerid:string[8];
MerkId:string[2];
cardid:string[2];
mem:string[255];
ReCount:integer;
G_Record:array of GoodsRec,
加上 GRECORDCOUNT :BYTE; //指定array of GoodsRec 的大小
-----------------------------------
发送时:
procedure sendrecord;
var
sendem :EmpMessage;
grecorcount:Byte;
recordsize:integer;
SendStream :tmemorystream;
begin
grecorcount:=3;
Setlength(sendem.G_record,grecorcount);
recordsize:=sizeof(EmpMessage) +grecorcount*sizeof(GoodsRec);//注意这里!!
sendem.grecorcount:=grecorcount;
sendem.ename:='test';
......//填完其他的数据
sendem.G_record[0].goodsid:='aaaaaaaaaa';
sendem.G_record[0].goodsname:='bbbbbbbbb';
......
sendem.G_record[grecorcount].goodsid:='fffffff';
sendem.G_record[grecorcount].goodsname:='zzzzzzzz';
SendStream:=Tmemorystream.create;
try
Sendstream.write(sendem,recordsize);
Sendstream.position:=0;
clientsocket.sendStream(sendstream);
finally
Sendstream.free;
end;
end;
接收端
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
type PEmpMessage=^EmpMessage;
var
EM:EmpMessage;
buf:pchar;
grecordcount:integer;
begin
getmem(buf,socket.ReceiveLength);
try
socket.ReceiveBuf(buf^,socket.ReceiveLength);
EM:=PEmpMessage(buf)^;
grecordcount:=em.grecordcount;
////取出 G_record 数据 ///其他数据省略不写了
memo1.lines.add(inttostr(EM.G_Record[0].id));
memo1.lines.add(EM.G_Record[0].goodsid);
memo1.lines.add(EM.G_Record[0].goodsname);
........
finally
freemem(buf);
end;
EmpMessage=record
ename:string[12];
phone:string[20];
address:string[100];
sendtime:string[30];
memberid:string[9];
orderid:string[13];
computerid:string[8];
MerkId:string[2];
cardid:string[2];
mem:string[255];
ReCount:integer;
G_Record:array of GoodsRec,
加上 GRECORDCOUNT :BYTE; //指定array of GoodsRec 的大小
-----------------------------------
发送时:
procedure sendrecord;
var
sendem :EmpMessage;
grecorcount:Byte;
recordsize:integer;
SendStream :tmemorystream;
begin
grecorcount:=3;
Setlength(sendem.G_record,grecorcount);
recordsize:=sizeof(EmpMessage) +grecorcount*sizeof(GoodsRec);//注意这里!!
sendem.grecorcount:=grecorcount;
sendem.ename:='test';
......//填完其他的数据
sendem.G_record[0].goodsid:='aaaaaaaaaa';
sendem.G_record[0].goodsname:='bbbbbbbbb';
......
sendem.G_record[grecorcount].goodsid:='fffffff';
sendem.G_record[grecorcount].goodsname:='zzzzzzzz';
SendStream:=Tmemorystream.create;
try
Sendstream.write(sendem,recordsize);
Sendstream.position:=0;
clientsocket.sendStream(sendstream);
finally
Sendstream.free;
end;
end;
接收端
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
type PEmpMessage=^EmpMessage;
var
EM:EmpMessage;
buf:pchar;
grecordcount:integer;
begin
getmem(buf,socket.ReceiveLength);
try
socket.ReceiveBuf(buf^,socket.ReceiveLength);
EM:=PEmpMessage(buf)^;
grecordcount:=em.grecordcount;
////取出 G_record 数据 ///其他数据省略不写了
memo1.lines.add(inttostr(EM.G_Record[0].id));
memo1.lines.add(EM.G_Record[0].goodsid);
memo1.lines.add(EM.G_Record[0].goodsname);
........
finally
freemem(buf);
end;

浙公网安备 33010602011771号