Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有NIO的全双工TCP连接不可能?_Java_Sockets - Fatal编程技术网

Java 没有NIO的全双工TCP连接不可能?

Java 没有NIO的全双工TCP连接不可能?,java,sockets,Java,Sockets,我有两个单独的java进程通过一个TCP连接进行通信。该协议不像HTTP那样是一个简单的同步请求/响应协议。双方可独立发起请求并发送数据。我想使用线程和阻塞套接字来实现这一点,避免NIO。但这有可能吗 Java套接字(Java.net.Socket)不是线程安全的,因此我不允许在一个线程中读取套接字,同时在另一个线程中写入它。(这是真的吗?) 因此,在没有使用NIO的情况下,TCP之上的某些协议无法在java中实现,或者我遗漏了一点 谢谢。我不知道您在哪里读到Java套接字通常是线程不安全的。您

我有两个单独的java进程通过一个TCP连接进行通信。该协议不像HTTP那样是一个简单的同步请求/响应协议。双方可独立发起请求并发送数据。我想使用线程和阻塞套接字来实现这一点,避免NIO。但这有可能吗

Java套接字(Java.net.Socket)不是线程安全的,因此我不允许在一个线程中读取套接字,同时在另一个线程中写入它。(这是真的吗?)

因此,在没有使用NIO的情况下,TCP之上的某些协议无法在java中实现,或者我遗漏了一点


谢谢。

我不知道您在哪里读到Java套接字通常是线程不安全的。您不能让多个线程同时写入或读取套接字的流,但没有理由不能让线程上写入套接字的输出流,而让另一个线程读取套接字的输入流。

全双工通信当然是可能的。如果没有NIO,您将需要一个线程来读取套接字(并执行请求的处理)。同时,另一个线程可以写入同一个套接字


如果您可以指出一些说明套接字不是全双工的文档,我将尝试澄清它。

套接字是线程安全的,因此使用多个线程没有问题,一个用于读取,一个用于写入。另一方面,如果希望避免多线程,则需要在执行任何出站操作时定期对套接字输入流执行轮询,以查看是否有传入数据

这有文件记录吗?我在java.net.Socket的JDK文档中没有找到任何关于线程安全的内容。通常情况下,除非明确说明,否则不能保证线程安全。由于两个流都只是底层套接字的代理对象,因此必须假设从不同的线程同时访问它们是不安全的,除非文档另有说明。杰拉尔德:这并不完全正确,Javadoc在定义线程安全性时通常是不确定的。有时会提到线程安全性,有时会明确提到缺少线程安全性。java.net.Socket的文档没有提到这两个方面。但正如您在问题中所述,要求同时同步访问套接字的两个方向是不合理的。