1,593
社区成员
发帖
与我相关
我的任务
分享
{Socket通讯结构体}
Socket_Rec = packed record
MsgType: String[2]; {命令字}
MsgLen: Word; {协议体长度}
Msg: array of Byte; {协议内容}
end;
{定义指针}
TSocket_Rec = ^Socket_Rec;
{实际要传输的数据}
RefreshLink_Rec = packed record
TheType : Integer;
ClientIP : string[15];
end;
var
Info: Socket_Rec;
bodyInfo, bodyInfoRep: RefreshLink_Rec;
LastTest: TSocket_Rec;
....
procedure TForm1.ServerSocketMainClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
BufferLen,Len: Integer;
begin
BufferLen := Socket.ReceiveLength;
{接受}
Socket.ReceiveBuf(Info,BufferLen);
Move(Info.Msg,bodyInfo,Info.MsgLen);{只是接受,接受到的数据另做它用,这里就不写了}
{组织发送数据}
bodyInfoRep.TheType := 2;
bodyInfoRep.ClientIP := '192.168.2.2';
{发送}
Len := SizeOf(Socket_Rec)-1+SizeOf(bodyInfoRep);
GetMem(LastTest,Len);
LastTest.MsgType := 'BA';
LastTest.MsgLen := SizeOf(bodyInfoRep);
Move(bodyInfoRep,LastTest.Msg,SizeOf(bodyInfoRep));
Socket.SendBuf(LastTest^,Len);
FreeMem(LastTest);
var
Info: Socket_Rec;
bodyInfo, bodyInfoRep: RefreshLink_Rec;
LastTest: TSocket_Rec;
....
procedure TForm1.btn1Click(Sender: TObject);
var
Len: Integer;
chr: array[0..9]of Char;
begin
if not ClientSocket1.Active then
begin
ClientSocket1.RemoteHost := '192.168.0.136';
ClientSocket1.RemotePort := '1013';
ClientSocket1.Active := True;
end;
{组织发送数据}
bodyInfo.TheType := 1;
bodyInfo.ClientIP := '192.168.0.136';
{发送}
GetMem(LastTest,SizeOf(Socket_Rec)-1+SizeOf(bodyInfo));
LastTest.MsgType := 'AA';
LastTest.MsgLen := SizeOf(bodyInfo);
Move(bodyinfo,LastTest.Msg,SizeOf(bodyInfo));
ClientSocket1.SendBuf(LastTest^,SizeOf(Socket_Rec)-1+SizeOf(bodyInfo));
FreeMem(LastTest);
{接收}
ClientSocket1.ReceiveBuf(Info,100);
Move(Info.Msg,bodyInfoRep,Info.MsgLen);
memo1.line.add(bodyInfoRep.ClientIP);
end;
{Socket通讯结构体}
Socket_Rec = packed record
MsgType: String[2]; {命令字}
MsgLen: Word; {协议体长度}
Msg: array of Byte; {协议内容}
end;
{Socket通讯结构体}
Socket_Rec = packed record
MsgType: String[2]; {命令字}
MsgLen: Word; {协议体长度}
Msg: array [0..0] of Byte; {协议内容}
end;
Socket_Rec1 = packed record
MsgType: String[2]; {命令字}
MsgLen: Word; {协议体长度}
Msg: array[0..0] of Byte; {协议内容}
end;
{ or }
Socket_Rec2 = packed record
MsgType: String[2]; {命令字}
MsgLen: Word; {协议体长度}
Msg: end of record; {协议内容}
end;
{组织发送数据}
bodyInfo.TheType := 1;
bodyInfo.ClientIP := '192.168.0.136';
{发送}
GetMem(LastTest,SizeOf(Socket_Rec)-1+SizeOf(bodyInfo));
LastTest.MsgType := 'AA';
LastTest.MsgLen := SizeOf(bodyInfo);
Move(bodyinfo,LastTest.Msg,SizeOf(bodyInfo));
ClientSocket1.SendBuf(LastTest^,SizeOf(Socket_Rec)-1+SizeOf(bodyInfo));
FreeMem(LastTest);
LastTest.Msg 的大小呢?