新手请教:TCP协议下,数据包大小的问题,奇怪 我自己定义了一个简单的传输协议,基于TCP做的。但是如果数据包大小限制在100个字节左右(包括了协议头),对方接收到的数据就会有错误,如果大小放大到1K一个,就可以正常传输。请问这是为什么?如果一个超过数据包大小的文件要传输,那么我会将它切割成多个数据包,然后分块传送。 现在就是对方的机器接收到之后拼装起来的数据是错误的,而1K 的包拼装起来就没有问题。 我对TCP/IP不是很懂,请指教 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 tcp协议保证包的次序、正确性 基于TCP协议,然后自己做数据包的分片和重组TCP自己本身就实现了数据包的分片和重组,以及错误重传。保证数据的可靠传输。你画蛇添足的来做,不明白你想做什么。如果每次只想发100字节,那你每次发100字节不就好了。难道你想把一个TCP包分成两个发送?!那楼主可以圆满了。 1 用TCP直接发送就是,你就不必分割了,除非你要考虑别的因素(e.g, MTU,IP分片)。不过调用Send()要注意判断成功发送了多少个字节。接收用recv()得注意判断成功接收的字节数。当然你的自定义协议里肯定描述你的总数据长度。2,TCP: 面向连接的可靠的传输协议。UDP:无连接的不可靠的传输协议。3, 建议看《TCP/IP详解》. 有这种应用很正常,使用TCP协议传输数据必须有应用层协议,否则怎么区分您传输的数据是文件大小、文件内容、文件名?出现楼主问题的原因,我想可能是nagle算法在作怪,可以关闭nagle算法试试。简单的说,就是WinSock为了提高网络通信性能,把你的几个小数据包一起发过去了。问题肯定出在接收端,也可能是您定义的协议不合适,没有处理几包数据粘在一起的情况。 nagle算法可以选择关闭。默认是开启的,它会根据网络情况自己决定是否使用。强制关闭后,就可以单独的send一次就实际发一次了 default button 属性有什么用?? 太狗血了,VISTA/WIN7下,不同会话里的进程,怎么共享变量? 求救!CFileDialog和将字符串写入磁盘的问题(急) 如何在vc程序中监测udp端口已启动 在CListCtrl中的第3列加入图像而不在第一列显示 用什么函数可以得到,数据库中当前游标到数据库开头或结尾的元组个数。(Access) 访问Intel 网上远程服务器上的数据库 WM_USER的值是多少? 初学问题:请问这样的定义是什么意思? 怎么这么慢?! CMySplitterWnd::createview出错 在VC中编程实现arp -d, 怎么写呢? 送分100.
TCP自己本身就实现了数据包的分片和重组,以及错误重传。保证数据的可靠传输。
你画蛇添足的来做,不明白你想做什么。如果每次只想发100字节,那你每次发100字节不就好了。难道你想把一个TCP包分成两个发送?!那楼主可以圆满了。
TCP: 面向连接的可靠的传输协议。
UDP:无连接的不可靠的传输协议。3, 建议看《TCP/IP详解》.
强制关闭后,就可以单独的send一次就实际发一次了