mfc,c++,vs2015,使用socket,tcp网络编程,发送端sendX个数据,把接收端的缓冲区大小设置为Y,(X大于Y),发送端执行send函数后,接收端不执行recv,那么请问如何知道发送方缓冲区还有哪些数据没有发送?以及这些数据的大小?发送方能不能自己调用哪个函数来实现上述疑问,而不需要接收方来告诉他已经收到了什么,他自己再去减!请大神帮忙,谢谢!

解决方案 »

  1.   

    肯定是有其他问题,否则你要send,就会recv
    tcp协议,能保证你接收到的数据的顺序和你发送的顺序一致(不考虑丢包)。
    但是,不保证每一次recv都能接收到完整的一个数据包,也不能保证每一次recv都只接收到一个数据包。
    在实际发送过程中,会对你发送的包进行拆分或者合并。所以你必须使用一个应用层协议来读取数据,可以用已有的通用协议,也可以自定义。
    顺便说一句,以后如果开发大型项目,还得考虑有人捣乱,发送异常数据的情况。
      

  2.   

    send的返回值会告诉你实际进入协议(发送)的大小,  通讯双方都会缓冲, 如从A 发到B
    A 有发送缓冲 假设为 2
    B 有接收缓冲,假设为 4在A 使用send 来发送10个, 如果B不recv, 那么情况一般就是 
    send返回 6,  有4个已经发送到B的缓冲, 有2个在本地缓冲
      

  3.   

    这是TCP/IP的基础常识了,建议先看下基本概念,一点一点来!tcp/ip详解