java - Nio Selector.select IO 准备情况

标签 java sockets tcp udp nio

在java NIO中,Selector.select()是否保证Socket Channel上至少有一个完整的UDP数据报内容可用,或者理论上,当数据报少于一个数据报时,比如几个字节,Selector可以唤醒?

如果传输协议(protocol)是 TCP,会发生什么情况,对于 Selector.select() 来说,与 UDP 有区别吗?

来自 API: 选择一组按键,其相应 channel 准备好进行 I/O 操作。

但是它没有具体说明就绪的含义。

所以我的问题:

  • 传入的数据报/流如何从硬件传输到 Java 应用程序套接字( channel )。

  • 当使用 UDP 或 TCP 客户端时,是否应该假设至少收到一个数据报,或者当只有一部分数据报可用时选择器可以唤醒?

最佳答案

It doesn't however specify what ready means.

So my questions:

  • how incoming packages/streams go from hardware to Java application Socket (Channels).

它们到达 NIC,在那里进行缓冲,然后传递到网络协议(protocol)栈,并从那里传递到套接字接收缓冲区。当您调用read().时,可以从那里检索它们。

  • when using UDP or TCP client, should one assume that at least one package is received

您的意思是数据包。实际上,对于 UDP,您的意思是数据报。对于 UDP,您可以假设已接收到整个数据报。

or Selector could wake when there is only a part of [packet] available?

对于 TCP,您可以假设至少有一个字节流末尾可用。 TCP 级别不存在“包”或“数据包”或“消息”之类的东西。

关于java - Nio Selector.select IO 准备情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29599024/

相关文章:

java - Android ProgressDialog 位于另一个对话框中

java - 在 java 中使用 request.getParameter() 时字符损坏

c - 我必须向服务器发送哪些参数?

c# - 串行到以太网 (TCP) 字节传输的显着延迟?

java - 除非持续流式传输,否则 TCP 套接字的延迟很差

applet - 如何在java小程序中动态清除缓存

asp.net - 我的物联网设备应该使用HTTP轮询还是使用TCP监听?

java - Java中的套接字服务器,最后连接的客户端是唯一可以读取套接字的

c - 套接字错误 : connection refused - what am I doing wrong?

java - 默认和参数化构造函数