大侠们好,初次写数据接收的代码,不知道下面的代码运行有没有漏洞,我测试是没什么问题。如有问题,请大侠帮忙改正一下,谢谢procedure Tfrmmain.TcpServerAccept(Sender: TObject;
ClientSocket: TCustomIpClient);
var
RCount: integer;
Rbuf: array[0..8191] of Byte;
Buf:TMemoryStream;
begin
try
Buf := TMemoryStream.Create;
{开始接收}
while ClientSocket.Connected do
if ClientSocket.WaitForData(5000) then //如果5秒钟没有数据到来,则断开
begin
RCount := ClientSocket.ReceiveBuf(Rbuf, 8192);
Buf.WriteBuffer(Rbuf, RCount);
if RCount <= 0 then
ClientSocket.Disconnect;
end else ClientSocket.Disconnect;//
{接收完毕}
finally
Buf.Free;
end;
end; TTcpServer采用bmThreadBlocking模式时,在OnAccept事件中使用while循环检查ClientSocket.Connected属性来判断连接是否可用是有问题的,但客户端断开时,此属性还是true。 此时唯一的区别是ClientSocket.WaitForData(5000)方法可以立即返回失败而不会有等待超时。
无奈,我只能以此来关闭。 不知道是不是我的用法有问题,这里请教各位。
ClientSocket: TCustomIpClient);
var
RCount: integer;
Rbuf: array[0..8191] of Byte;
Buf:TMemoryStream;
begin
try
Buf := TMemoryStream.Create;
{开始接收}
while ClientSocket.Connected do
if ClientSocket.WaitForData(5000) then //如果5秒钟没有数据到来,则断开
begin
RCount := ClientSocket.ReceiveBuf(Rbuf, 8192);
Buf.WriteBuffer(Rbuf, RCount);
if RCount <= 0 then
ClientSocket.Disconnect;
end else ClientSocket.Disconnect;//
{接收完毕}
finally
Buf.Free;
end;
end; TTcpServer采用bmThreadBlocking模式时,在OnAccept事件中使用while循环检查ClientSocket.Connected属性来判断连接是否可用是有问题的,但客户端断开时,此属性还是true。 此时唯一的区别是ClientSocket.WaitForData(5000)方法可以立即返回失败而不会有等待超时。
无奈,我只能以此来关闭。 不知道是不是我的用法有问题,这里请教各位。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货