繁体   English   中英

是否有可能在Java套接字中进行写入而没有同时进行读取抛出?

[英]Is it possible that a write in a Java socket throw without a simultaneous read throwing?

假设我有两个线程,一个用于读取,另一个用于发送; 如果写入失败,其他线程中的读取操作是否也会总是失败?

我认为至少有一种情况不是这样(如果发送线程被中断,则为InterruptedIOException),但是还有其他情况吗? 如果是这样,其中某些情况与网络问题有关吗?

另一种方法是,如果您已关闭套接字以进行写入。 您不会写,但仍然可以阅读。

当另一端关闭Socket时,您可能无法写入(因为数据无处可去),但是可能存在未读数据,您仍然应该能够读取它们。

如果读取超时,则可能要关闭套接字并终止所有写操作。 例如,如果另一端已锁定。 如果您不这样做,则写线程可能会永远阻止等待等待超时的套接字的写(并且可能永远是)

我想这真的取决于您的情况。 可能最常见的情况是关闭连接,这意味着读取和写入都将失败。 但是,这不一定是正确的。 您可能有一些奇怪的防火墙设置,该设置使您可以读取但不能写入。

我对您的建议是分别对每个线程进行编程,而不是考虑每种可能的情况。 如果您尝试阅读却无法阅读,会发生什么? 如果您尝试在另一个线程中编写而不能编写,会发生什么? 如果两个线程都可以读取和写入非常重要,请设计某种回退机制,以在当前线程以某种方式出现问题时(当然,如果另一个线程仍然处于活动状态)停止另一个线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM