Type User_Info=Record Command_Name:Integer; User_Name:array[0..10]; User_Age:Integer; User_Address:array[0..50]; End; 这样比较合理接收 procedure TTeleForm.SLICClientSocketRead(Sender: TObject; Socket: TCustomWinSocket); var Packet: User_Info; Buffer: array[0..10240] of Char; i, ReceiveLen, PacketLen: Integer; begin PacketLen := SizeOf(User_Info); ReceiveLen := Socket.ReceiveLength; if (ReceiveLen mod PacketLen) <> 0 then Exit; Socket.ReceiveBuf(Buffer, ReceiveLen); for i := 0 to (ReceiveLen div PacketLen) - 1 do begin Move(Buffer, Packet, PacketLen); OnReceivePacket(Packet); //你的超做 Move(Buffer[PacketLen], Buffer, PacketLen * (ReceiveLen div PacketLen - i - 1)); end;end;end;
http://www.csdn.net/expert/topic/636/636068.xml?temp=.6024744
Type User_Info=Record
Command_Name:Integer;
User_Name:array[0..10];
User_Age:Integer;
User_Address:array[0..50];
End;
这样比较合理接收
procedure TTeleForm.SLICClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Packet: User_Info;
Buffer: array[0..10240] of Char;
i, ReceiveLen, PacketLen: Integer;
begin
PacketLen := SizeOf(User_Info);
ReceiveLen := Socket.ReceiveLength;
if (ReceiveLen mod PacketLen) <> 0 then
Exit;
Socket.ReceiveBuf(Buffer, ReceiveLen);
for i := 0 to (ReceiveLen div PacketLen) - 1 do
begin
Move(Buffer, Packet, PacketLen);
OnReceivePacket(Packet); //你的超做
Move(Buffer[PacketLen], Buffer, PacketLen * (ReceiveLen div PacketLen - i - 1));
end;end;end;
还有Move是什么意思?非常感谢!