我可以使用两个不同的线程在同一个套接字上读写吗?

时间:2011-04-14 20:43:28

标签: java networking tcp

我正在为一项任务写一点东西,我必须管理主机之间的TCP连接。我的愿景最初是两个TCP连接,一个传入,一个传出,以及一个非常精细的协议来管理这些连接的创建和销毁。

那么,这是一个更简单的替代方案,我希望有效。一个插座,易于连接,易于破坏。一个线程将数据写入该套接字上的流,一个线程从同一个套接字上的流中读取。我没有阻塞的问题,所以我不需要使用nio。

我可以做到这一点吗?

4 个答案:

答案 0 :(得分:10)

TCP套接字是一个全双工流,您可以从多个线程读取和写入它。这样做是一个好主意是一个完全不同的问题。

答案 1 :(得分:5)

如果你只有一个编写器线程和一个读者线程,那么它可能会产生更清晰,更简单的代码。

希望通过该套接字进行通信的其他线程会通过某个队列将请求传递给编写器线程。同样,读者会通过队列将传入的消息分派到适当的线程。

此技术通常用于用户界面。

答案 2 :(得分:2)

据我所知,套接字是线程安全的。从一个线程调用socket上的close()时,你应该小心。第二个可以挂起一些阻止功能或无限选择。

答案 3 :(得分:2)

是的,你可以这样做。您可以让1个线程使用ServerSocket启动服务器,使用另一个线程通过Socket连接到此服务器。您可以通过谷歌搜索EchoServer / EchoClient的大量示例来开始使用。