[英]Java SocketChannel write blocked while reading
我试图在两个不同的线程(Android API 25级)中同时使用SocketChannel.write
和SocketChannel.read
。
我将SocketChannel配置为阻止模式 。
为了阅读,我创建了一个无限循环来读取服务器中的所有内容:
// Make socketChannel.read() return after 500ms at most
socketChannel.socket().setSoTimeout(500);
while(!SHUTDOWN) {
int read = socketChannel.read(buffer);
if(read > 0 ){
// Do something nice
break;
}
}
对于写入,我每10秒写入一次数据。
问题是,我发现有时写入操作在读取时被阻塞。
但是,如果我使读取线程在每个循环中短暂睡眠(例如100ms),则此问题将不再出现。
看起来读线程正在阻止写线程
AFAIK,TCP连接可以同时提供双向操作。 有人可以帮忙解释一下吗?
TCP使用端到端流控制协议来避免发送方发送数据的速度过快,以至于TCP接收方无法可靠地接收和处理数据。 在各种网络速度的机器进行通信的环境中,拥有流控制机制至关重要。 例如,如果PC将数据发送到正在缓慢处理接收到的数据的智能手机,则智能手机必须调节数据流,以免被淹没。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.