关于TCP协议下传输数据的问题,分不多,但已经倾家荡产了。(55分)

  • 主题发起人 主题发起人 ForDelphi
  • 开始时间 开始时间
F

ForDelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
我在接收端开了一块缓冲,当缓冲满时,暂停从网络接收数据(不能断开连接),缓冲空时继续接收。
用Indy的构件如何实现?现在只弄了不停接收数据并存贮,一会儿就超出缓存了。
稍微讲一下原理就行,关键部份写一小例子就可。谢谢!
 
在线程里面做,如果缓冲慢就 Suspend

-----
http://www.8421.org
 
用把缓冲中的数据COPY出来以后,清空缓冲,
FillChar(buf,bufsize,0);
 
不知你有没有考虑过这种情况:
当你暂停从网络接收数据,但是系统仍在不断的接受数据放入系统缓冲区。当数据量超过
系统缓冲区时,你的一部分数据将丢失。
 
winsock默认的系统缓冲是8k,如果对方发给你的数据超过8k而你还没recv完,有可能造成数据丢失
,解决的办法是用winsock api扩大系统默认缓冲,比如你是用Delphi 的TSocketServer控件,你可以
在OnClientconnect的时候加下面的代码,改变系统默认缓冲

iRecvBufLen := 64 * 1024; //64k
setsockopt(Socket.SocketHandle, SOL_SOCKET, SO_RCVBUF, @iRecvBufLen, sizeof(iRecvBufLen));
 
多人接受答案了。
 
其实不是TCP缓冲的问题,是你处理的问题,你把BUF的大小改到10K,就没有什么问题了
缓冲影响效率,没其他的用!!!
 
后退
顶部