我试图在两个不同的线程中同时使用SocketChannel.write和SocketChannel.read (Android级别25)。
我将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‘t,那么这个问题就不会出现了。
看起来像是读取线程阻塞了写入线程
AFAIK,TCP连接可以同时提供双向操作.有人能帮我解释一下吗?
发布于 2017-05-14 08:10:35
正如在TCP维基百科-流控制中所解释的
TCP使用端到端流控制协议,以避免发送方发送数据的速度太快,使得TCP接收方无法可靠地接收和处理数据。在具有不同网络速度的机器通信的环境中,拥有流量控制机制是必不可少的。例如,如果PC将数据发送到正在缓慢处理接收到的数据的智能手机,则智能手机必须调节数据流,以免不堪重负。
https://stackoverflow.com/questions/43961714
复制相似问题