2012-10-09 157 views
9

我想写一个非常简单的套接字程序,我基本上想要的是,客户端不断监听来自服务器的通信,在一个while(true)循环中。现在我还希望客户端能够在收听过程中将一些数据发送回服务器。套接字读取和写入同时

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

有没有更好的解决办法或者这是我能做到这一点

+1

请编辑您的帖子以提供有关您的工作的更多详情。你有什么尝试?你做了什么研究?什么代码不起作用? – Gray

+1

这只是一个问题 - 请参阅@CrazyCasta答案。 Tx/rx流是独立的,可以从一个线程读取,而从另一个线程写入很好。 –

+0

R/W同时是TCP的全双工定义。 – irreputable

回答

6

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

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

+1

我同意除了超时部分。你为什么要这样?反正你可以写。 –

+0

@TobiasRitzau允许使用一个线程而不是两个线程。我不确定OP在做什么,所以我只是增加了另一种选择。 – CrazyCasta

+2

由此可能会导致一些严重的同步问题。如果你超时,套接字是关闭的,还是我错过了什么? –

-1

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

+2

这是一个套接字的功能......它已经支持全双工。 –

0

看看FTP协议规范。它使用两个套接字/通道,一个用于命令,另一个用于数据。

+1

这不是必需的。一个套接字足以在两个单独的通道上发送和接收数据。 –