当没有收到确认时,TCP组合两个消息

时间:2012-02-27 16:57:12

标签: java

我想从服务器(在java中)发送两条消息:

send: 0x01
Sleep: 5 seconds
send: 0x02

客户端是一个iPhone应用程序,有时候,当应用程序处于后台时,发送服务器需要5-10秒的时间,并且TCP在ONE PACKET中发送第一条消息AND秒消息,它如下所示:

Time 00:00:00    server sends 0x01 - and wait for ack
Time 00:00:05    server not received ack and it needs to send the second message, so the server send: 0x01 0x02

然后客户端不知道此消息的含义,并发送FIN。

有什么建议吗?

我查看了this页面,找到了避免此链接的任何选项。可能你会找到与这个问题相关的东西。

提前致谢。

1 个答案:

答案 0 :(得分:1)

  1. 您应该使用Socket.setTcpNoDelay(true)

  2. 停用Nagle算法
  3. TCP是面向流的协议,而不是基于消息的协议。如果您的客户端应用无法应对以“奇怪”块状态到达的内容,那么您做错了。