不受限制地从Socket读取可用内容

他看见;

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

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

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

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

格罗德里格斯(Grodriguez):

使用available()是唯一不使用异步方法的方法。

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

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

请注意,available返回0并不意味着已到达数据的结尾-只是意味着没有可立即使用的数据(数据可能在下一毫秒变为可用)。因此,您需要具有其他机制才能使服务器知道客户端将不再发送任何数据,而是在等待响应。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章