java - 套接字 - C 和 Java 发送之间的区别

标签 java c sockets nio

我正在将 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 伪代码。

  1. 清除缓冲区,
  2. 将字符串放入Buffer,
  3. 输入字符串的大小,
  4. 翻转。

对于 C 套接字,即使我有 4 个单独的 send(),所有 4 个字符数组都被一起发送。

难倒了。有任何想法吗?

最佳答案

TCP 是一种面向流的协议(protocol)。也就是说,流如何拆分应该无关紧要。因此,需要在特定边界拆分流的设计可能错误地使用了 TCP。

话虽如此,您可以尝试通过带有 TCP_NODELAY 选项的 setsockopt 来关闭“集总”。

关于java - 套接字 - C 和 Java 发送之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4407575/

相关文章:

java - 排查Nashorn "Method code too large!"异常

java - 一种方法的多个锁 - Java

sockets - IBM Worklight 6.0 - 套接字异常连接重置

c++ - 修改 boost::asio::socket::set_option

c# - 通过 ping 或 socket 检查代理有什么区别?

Java - 将快捷键添加到 JMenuItem

java - 枚举中成员字段的顺序

c - 如何将帧速率限制在 60fps?

c - 定长空字符串中的空字符在哪里?

c - 在 lex 和 yacc 中模拟 gcc 编译器