我尝试在两个不同的主题(Android API Level 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秒写一次数据。
问题是,我发现有时写作操作在阅读时被阻止了。
但是如果我让阅读线程在每个循环中短时间内休眠,例如100毫秒,这个问题将不再出现。
看起来像阅读线程阻止写线程
AFAIK,TCP连接可以同时提供双向操作。任何人都可以帮忙解释一下吗?
答案 0 :(得分:1)
如TCP Wikipedia - Flow Control中所述:
TCP使用端到端流量控制协议来避免使用 发送方发送数据的速度太快,TCP接收方无法接收和处理 它可靠。拥有流量控制机制是必不可少的 不同网络速度的机器进行通信的环境。对于 例如,如果PC将数据发送到正在缓慢处理的智能手机 收到数据,智能手机必须调节数据流,以免 不知所措。