** 如何调整ClientSocket使其每次接收长度超过3736字节?***

sydt 2006-02-13 09:40:47
TClientSocket,TServerSocket偶用线程+阻塞方式, 当ServerSocket发送一个超过3736字节的串,ClientSocket需要分两次或多次接收完一个

长串,每次串长无法超过3736字节,如ServerSocket发送5540字节,ClientSocket分三次接收:
Receive Length is: 3736
Receive Length is: 548
Receive Length is: 1256

接收数据如下:
...
char buf[5540];
pStream->WaitForData(0x7fffffff); //TWinSocketStream * pStream;
if (pStream->WaitForData(60000))
Len=pStream->Read(buf,5540); //无法超过3736字节
return Len;
...
如何调整ClientSocket使其每次接收buf长度超过3736字节?
...全文
213 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sydt 2006-02-13
  • 打赏
  • 举报
回复
各位,方便的话帮忙看看一个老帖!
http://community.csdn.net/Expert/topic/4272/4272264.xml?temp=.6019403
sydt 2006-02-13
  • 打赏
  • 举报
回复
To:netsys2(来电!),还是不理解
接收端每次串长无法超过3736字节,能否帮我分析一下3736是随机还是和软机或硬件有关?
我测试时发送程序和接收程序都在同一台计算机上!
netsys2 2006-02-13
  • 打赏
  • 举报
回复
还有一个原因是TCP 的nagle算法,不在你这种情况。
netsys2 2006-02-13
  • 打赏
  • 举报
回复
有2个原因会产生不完整包:

以太网的 MTU 为 1526 字节。减去报头和报尾的数据净荷大小(共 26 字节)。

所以你发送再大的包,到IP层时也得分割,然后IP包到接收方需要经过TCP的重装,

到应用层时数据包肯定不是完整的。


实际上TCP是个流协议,它能保证按原数据方式顺序给你提供,但绝对不能保证发什么包,另外一端一次接收完整一个包。


TCP的接收应该也按流的方式接收,并根据数据包大小切割分开多个包处理。
痞子酷 2006-02-13
  • 打赏
  • 举报
回复
发送端向对方发送报文时,最好发送一个报文长度。
接收端根据报文长度,读取多长的报文。
我不懂电脑 2006-02-13
  • 打赏
  • 举报
回复
能否主动控制每次接收串的大小?
不能,这个是有双方机器自己决定的。
sydt 2006-02-13
  • 打赏
  • 举报
回复
To: constantine(飘遥的安吉儿)
我在内网使用,没考率效率问题,只是奇怪
1:分次接收原则是什么?
2:能否主动控制每次接收串的大小?
帮忙!!
多谢!!!
constantine 2006-02-13
  • 打赏
  • 举报
回复
这个控件我基本不用,但是为什么要传这么大呢
普通情况下mtu不会超过1500
超过要分包,然后..............
你为什么要用这么大的包呢,没有必要,效率不好
sydt 2006-02-13
  • 打赏
  • 举报
回复
多谢!!!
结帖!!!
sydt 2006-02-13
  • 打赏
  • 举报
回复
To: netsys2(来电!)
多谢,就是这个帖子,马上拜读!!!
多谢!!!
netsys2 2006-02-13
  • 打赏
  • 举报
回复
在这里:

http://community.csdn.net/Expert/TopicView3.asp?id=4317435
netsys2 2006-02-13
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/TopicView3.asp?id=4385837
sydt 2006-02-13
  • 打赏
  • 举报
回复
To: netsys2(来电!) ,好的,
记得兄台发过一个关于制定SOCKET通信协议的帖子和建议,偶找不到了,麻烦再帖一次或发到我邮箱 builderone@163.com
偶要给别人做一个发送设备报警信息的接口,偶做服务端,负责发送,客户做接收端,兄台如有什么建议或心得一并发给我吧!
多谢!!!
netsys2 2006-02-13
  • 打赏
  • 举报
回复
不要追究3736,按次序接受然后分割处理

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧