远端终端是一个GPRS MODEM,我用windows socket作为服务端的监听,
假设MODEM有10包数据,和服务端建立TCP连接后,依次将这10包数据发给服务端(TCP连接没有断)。
我的问题是,
1:TCP发送端是否会将这10包数据根据它自己的定义重新打包成N包?
2:TCP接收端是否会将重新打过包的N包数据恢复成MODEM发送的那10个包?
3:也就是说,在TCP连接不断的情况下,MODEM给服务端发送10包数据,到服务端是否会接收到大于10包的数据?

解决方案 »

  1.   

    其实三个问题结果就是一个10个包发送给服务器端后,会根据你发包的大小以及时间间隔不同,服务器端收到的包数和大小也不相同,SOCKET通讯过程中,如果包太大的话,那么将会分开多个包发送,这个主要跟通讯缓冲区相关,如果发送间隔很短的话,那么多个小包将有可能合成一个大包发给服务器。
      

  2.   

    先理解TCP当中“流”的概念。
      

  3.   

    TCP层已经解决好IP报文次序问题,确保接收的次序与发送相同,接收的字节数与发送相同。1:TCP发送端是否会将这10包数据根据它自己的定义重新打包成N包?
    不会
    2:TCP接收端是否会将重新打过包的N包数据恢复成MODEM发送的那10个包?不存在重新打包问题3:也就是说,在TCP连接不断的情况下,MODEM给服务端发送10包数据,到服务端是否会接收到大于10包的数据?
    不会
      

  4.   

    这些个问题,去问猫厂家的好了。一般来说,都是缓冲一个完整的包之后,发到Server端,应该不会有拆包的情况。
      

  5.   

    GPRS MODEM一般都有最大发送长度的,估计只能一包一包的发,每包不能超过最大长度的,tcp/ip应该不用自己考虑
      

  6.   

    TCP/IP会根据缓冲区大小.发送包的大小进行重新组包,但对用户不透明,在用SOCKET发10包时,在MODEM接收到的仍然是10包,但在物理层传输时可能不是10包