套接字同时读写

时间:2012-10-09 20:19:42

标签: java multithreading sockets

我正在尝试编写一个非常简单的套接字程序,我基本上想要的是客户端在一段时间(真实)循环中继续监听来自服务器的通信。现在我也希望客户端能够在收听的过程中将一些数据发送回服务器。

我能想到的唯一解决方案是为读写创建一个线程,并在每次必须写入时中断读取线程。

是否有更好的解决方案,或者这是我能做到这一点的唯一方法

3 个答案:

答案 0 :(得分:6)

您可以使用两个线程。一个用于阅读,一个用于写作。这样写入线程可以随时写入(不需要停止读取)。

另一种方法是在调用read之前在套接字上使用setSoTimeout(timeoutMs)。如果读取的时间超过timeoutMs毫秒,则会导致它抛出SocketTimeoutException,允许您随意写入。

答案 1 :(得分:0)

查看FTP协议规范。它使用两个套接字/通道执行您要执行的操作,一个用于命令,另一个用于数据。

答案 2 :(得分:-1)

您可以使用两个不同的端口,一个用于收听,另一个用于写入。并使用不同的线程来执行操作,然后你(while)循环不会产生问题。