C
cjsam
Unregistered / Unconfirmed
GUEST, unregistred user!
我客户端接受数据部分这样写的:采用的是ctblocking
接受数据放在TThread.execute;overload;中进行,代码主要在下面:
var
sock: TClientSocket;
TheStream: TWinSocketStream;
ReadBuff:array[0 .. 8499] of Char;
receiveframe: string;
begin
.............
while (not Terminated) and (sock.Active) do
begin
try
if TheStream.WaitForData( FTimeout ) then
begin
FillChar(ReadBuff, 8500, 0);
sock.Socket.ReceiveBuf(ReadBuff,sizeof(readbuff));
receiveframe :=copy(readBuff,1,sizeof(readbuff));
..........
//然后用TheStream.Write(。。。。)发送数据和服务器通讯交互。
.......................
end;
except
end;
end;
end;
在一个线程内这样接受服务端的数据,如果我将服务端和我的客户端放一台机器上,接受数据正常,但是当没在一台机器上的时候,收的数据 收不完整。
大家有谁知道这是什么原因吗?
后来发现是因为TCP自动将我的一帧分几次包传给我了,请我我怎样才能断断我收到的这个包数据是服务器
发过来的一个完整的我们之间约定的帧。
接受数据放在TThread.execute;overload;中进行,代码主要在下面:
var
sock: TClientSocket;
TheStream: TWinSocketStream;
ReadBuff:array[0 .. 8499] of Char;
receiveframe: string;
begin
.............
while (not Terminated) and (sock.Active) do
begin
try
if TheStream.WaitForData( FTimeout ) then
begin
FillChar(ReadBuff, 8500, 0);
sock.Socket.ReceiveBuf(ReadBuff,sizeof(readbuff));
receiveframe :=copy(readBuff,1,sizeof(readbuff));
..........
//然后用TheStream.Write(。。。。)发送数据和服务器通讯交互。
.......................
end;
except
end;
end;
end;
在一个线程内这样接受服务端的数据,如果我将服务端和我的客户端放一台机器上,接受数据正常,但是当没在一台机器上的时候,收的数据 收不完整。
大家有谁知道这是什么原因吗?
后来发现是因为TCP自动将我的一帧分几次包传给我了,请我我怎样才能断断我收到的这个包数据是服务器
发过来的一个完整的我们之间约定的帧。