我正在将 Java 应用程序(使用 NIO)转换为 C 套接字,但遇到了问题。同时,我正在使用 grinder 作为 TCPProxy,以查看已传输的内容。
作为握手的一部分,我需要将 4 行发送给客户端。
Hello~Server\r\n
Hello1~Server1\r\n
Hello2~Server2\r\n
Hello3~Server3\r\n
对于 Java 应用程序(使用 NIO),每个字符串在每个 Java NIO flip() 之后发送出去。也就是说上面4行是一条一条的发出去。
我有以下 Java 伪代码。
- 清除缓冲区,
- 将字符串放入Buffer,
- 输入字符串的大小,
- 翻转。
对于 C 套接字,即使我有 4 个单独的 send(),所有 4 个字符数组都被一起发送。
难倒了。有任何想法吗?
最佳答案
TCP 是一种面向流的协议(protocol)。也就是说,流如何拆分应该无关紧要。因此,需要在特定边界拆分流的设计可能错误地使用了 TCP。
话虽如此,您可以尝试通过带有 TCP_NODELAY
选项的 setsockopt
来关闭“集总”。
关于java - 套接字 - C 和 Java 发送之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4407575/