不阻塞地读取 Socket 中可用的内容

2024-01-10

我正在服务器上工作,该服务器读取客户端发送的数据,但大小未知,我也无法更改客户端发送的大小。

我想从客户端读取数据,直到它阻塞并等待服务器的响应。我尝试使用available(),它有时会起作用,但有时即使流中有一些数据,它也只是返回零。

while((len = in.available()) != 0)
    in.read(b,0,len);

在Java中有什么办法可以做到这一点吗?我知道异步方法,但从未尝试过,所以如果有人可以提供一个简短的示例。


Using available()是不诉诸异步方法的唯一方法。

您实际上并不需要依赖返回的值available();只需检查是否有“一些”数据可用以确保read不会阻塞。但是,您必须检查返回的值read(实际读入数组的字节数):

// Process all data currently available
while (in.available() != 0)
{
    int nb = in.read(b);
    // Process nb bytes
}

注意available返回 0 并不意味着已到达数据末尾——它仅意味着没有可立即使用的数据(数据可能会在下一毫秒内变得可用)。因此,您需要有一些其他机制,以便服务器知道客户端将不再发送任何数据并正在等待响应。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不阻塞地读取 Socket 中可用的内容 的相关文章

随机推荐