问一个简单的socket通讯的问题 比如在服务器端的socket一次send 一个100字节的数据过来(基于tcp协议),那么客户端的socket是否可以多次调用receive函数来接收这个100个字节的数据呢?(比如调用10次receive函数,每次接收10个字节)。没有系统学过网络编程,现在被临时分配了一个维护一个c/s系统的任务,恳请大家赐教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 网上一位大侠说:本来就应该这样做~一次是不保证能全部接收~你应该接收N次~直接全部接收完毕 我在想:为什么一次是不保证能全部接收,tcp协议不是保证接收数据的吗?假如我开辟的接收缓冲区够大,应该可以一次接收吧 TCP是数据流传输协议,如果你理解了什么是流,也就好办啦。 嗯,理解TCP(数据流)和UDP(数据报)的区别。 TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,是连成一片的,其间是没有分界线的.但一般通讯程序开发是需要定义一个个相互独立的数据包的,比如用于登陆的数据包,用于注销的数据包.由于TCP"流"的特性以及网络状况,在进行数据传输时会出现以下几种情况.假设我们连续调用两次send分别发送两段数据data1和data2,在接收端有以下几种接收情况(当然不止这几种情况,这里只列出了有代表性的情况).A.先接收到data1,然后接收到data2.B.先接收到data1的部分数据,然后接收到data2余下的部分以及data2的全部.C.先接收到了data1的全部数据和data1的部分数据,然后接收到了data2的余下的数据.D.一次性接收到了data1和data2的全部数据. 如果你理解了SOCKET有缓冲也就明白了. TCP协议在发送和接收时,会对数据进行重新组合,可能多次发送的数据一起接收到,也可能一次发送的数据会分多次到达,每次只能接收到一部分,TCP保证数据有序到达,但发送与接收不是一一对应的,在程序设计上应该多次接收,直到所需数据全部收到(或遇到错误)为止。 TCP协议在发送和接收时,会对数据进行重新组合,可能多次发送的数据一起接收到,也可能一次发送的数据会分多次到达,每次只能接收到一部分,TCP保证数据有序到达,但发送与接收不是一一对应的,在程序设计上应该多次接收,直到所需数据全部收到(或遇到错误)为止。 散分,讨论网络编程。 无头节点的单链表的排序 使用VC++生成单文档、多视风格的应用程序 求教:用VC怎样才能做图形报表(希望给一点思路) 请高手指教,关于如何对IE窗口的HTML页面进行控制的问题??? 高分求解关于mschart控件的使用! How to Kill Dialog When InitDialog 在哪里有vc简单例程?初学者送分请高手指路! 关于Custom控件的问题 mfc界面问题 在vs2005中使用ActiX控件遇到的问题。 请问:怎么使clistctrl具有和excel类似的选中单元格方法?
我在想:为什么一次是不保证能全部接收,tcp协议不是保证接收数据的吗?假如我开辟的接收缓冲区够大,应该可以一次接收吧
嗯,理解TCP(数据流)和UDP(数据报)的区别。
TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,是连成一片的,其间是没有分界线的.但一般通讯程序开发是需要定义一个个相互独立的数据包的,比如用于登陆的数据包,用于注销的数据包.由于TCP"流"的特性以及网络状况,在进行数据传输时会出现以下几种情况.
假设我们连续调用两次send分别发送两段数据data1和data2,在接收端有以下几种接收情况(当然不止这几种情况,这里只列出了有代表性的情况).
A.先接收到data1,然后接收到data2.
B.先接收到data1的部分数据,然后接收到data2余下的部分以及data2的全部.
C.先接收到了data1的全部数据和data1的部分数据,然后接收到了data2的余下的数据.
D.一次性接收到了data1和data2的全部数据.