【问题标题】:How does Java form TCP packets from byte arrays?Java如何从字节数组中形成TCP数据包?
【发布时间】:2014-08-04 18:11:02
【问题描述】:

虽然 Java 中的 SocketIn/OutputStreams 似乎是基于 API 用户的流,但 TCP 数据包是基于数据包的。一个人只能写一个字节或一个字节数组。但也可以写入比 TCP 数据包所能携带的更多的字节数。

那么Java是如何通过write方法形成TCP包的呢?

创建调用 write(singleByte) 4 次 4 TCP 数据包?还是java将字节连接在一起?

java 是否连接和拆分字节以形成 TCP 数据包?

【问题讨论】:

  • 操作系统在处理这些事情方面比 Java 好得多。无需通过将所有代码重写到 JDK 来复制功能。
  • @Kayaman 所以这是由操作系统处理的?那么大多数操作系统是如何处理它的呢?为什么不赞成呢?
  • 我没有对你投反对票。大多数操作系统有效地处理它,所以我们不必关心它。
  • 哦,好吧。感谢您的信息;)

标签: java sockets networking tcp packet


【解决方案1】:

不,Java,或者更准确地说是 Java 虚拟机,没有理由深入了解这些细节。

JVM 所做的是,它像任何本机程序一样打开本机 Socket。然后,它允许 Java 代码通过各种 Java API 与本机套接字进行交互。这会将网络细节留给操作系统的网络堆栈(TCP/IP 实现)。

【讨论】:

  • 本地套接字是否有可能知道代码是否会多写一个字节?
  • 在调用 write() 之前,我打算写下无法知道底层套接字缓冲区是否已满,但后来我用谷歌搜索发现:stackoverflow.com/a/1805234/3199595
猜你喜欢
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多