您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Delphi >> 有关TServerSocket和TClientSocket的问题

有关TServerSocket和TClientSocket的问题

来源:网络整理     时间:2016/8/30 23:53:34     关键词:

关于网友提出的“ 有关TServerSocket和TClientSocket的问题”问题疑问,本网通过在网上对“ 有关TServerSocket和TClientSocket的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 有关TServerSocket和TClientSocket的问题
描述:

在TServerSokcet中调用SendBuf发送4000的数据包,在TClientSocket的ClientSocketRead事件中用Socket.ReceiveBuf接收数据包,然后用日志记录,在日志中看到发送的记录与接收的记录不一致,会有几个数据包接收不到,我用的是TCP方式,不应该会经常丢失(功能 :从一台电脑读文件到别一台电脑),请高手指教....


解决方案1:

bds已经没有这控件了,可能是它自己也觉得不可靠吧

解决方案2:

我也遇到同样的问题,不知道是怎么回事,感觉TClientSocket的ClientSocketRead不怎么可靠

解决方案3:

ReceiveBuf并不一定能一次性接收完整的数据。
在调用该函数前,先通过Socket.ReceiveLength获取数据长度,然后检查ReceiveBuf函数的返回值,这个返回值表示该函数实际接收了的数据。如果返回值小于Socket.ReceiveLength获取的数据长度,则需要再次调用ReceiveBuf函数,直至所有数据全部获取。
例如:
procedure TForm1.SocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
  iLength   : Integer;
  iReceived : Integer;
  bBuffer   : array of Byte;
begin
  iLength := Socket.ReceiveLength;
  while iLength > 0 do
  begin
    SetLength (bBuffer, iLength);
    iReceived := Socket.ReceiveBuf(bBuffer[0], iLength);
    //处理数据
    ......
    iLength := iLength - iReceived;
  end;
  bBuffer := nil;
end;


以上介绍了“ 有关TServerSocket和TClientSocket的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3671000.html

相关图片

相关文章