TCPserver控件接收文件的代码,很短,帮忙看看,这段代码有没有问题。。(50)

  • 主题发起人 主题发起人 zyjba
  • 开始时间 开始时间
Z

zyjba

Unregistered / Unconfirmed
GUEST, unregistred user!
大侠们好,初次写数据接收的代码,不知道下面的代码运行有没有漏洞,我测试是没什么问题。如有问题,请大侠帮忙改正一下,谢谢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)方法可以立即返回失败而不会有等待超时。 无奈,我只能以此来关闭。 不知道是不是我的用法有问题,这里请教各位。
 
哎Delphibbs现在人好少啊!帮顶!
 
谢谢帮顶
 
满眼都是漏洞。[8D]
 
白河愁大侠,我对这个控件不熟,所以才请教大富翁,请您指点一二好吗,或留下QQ
 
这样写无论怎么样都不行的。
 
Buf := TMemoryStream.Create;我来指出一点吧! 这个流不应该在这里创建! 除非你接收的数据很小, 保证能一次接收完成!
 
后退
顶部