我想写一个非常简单的套接字程序,我基本上想要的是,客户端不断监听来自服务器的通信,在一个while(true)循环中。现在我还希望客户端能够在收听过程中将一些数据发送回服务器。套接字读取和写入同时
我能想到的唯一解决方案是为读取和写入创建一个线程,并且每次我必须写入时中断读取线程。
有没有更好的解决办法或者这是我能做到这一点
我想写一个非常简单的套接字程序,我基本上想要的是,客户端不断监听来自服务器的通信,在一个while(true)循环中。现在我还希望客户端能够在收听过程中将一些数据发送回服务器。套接字读取和写入同时
我能想到的唯一解决方案是为读取和写入创建一个线程,并且每次我必须写入时中断读取线程。
有没有更好的解决办法或者这是我能做到这一点
您可以使用两个线程的唯一途径。一个用于阅读,一个用于写作。这样写线程可以随时写入(不需要停止读取)。
另一种方法是在调用read之前在套接字上使用setSoTimeout(timeoutMs)
。如果读取时间超过timeoutMs毫秒,这将导致它抛出一个SocketTimeoutException
,允许您随意写入。
我同意除了超时部分。你为什么要这样?反正你可以写。 –
@TobiasRitzau允许使用一个线程而不是两个线程。我不确定OP在做什么,所以我只是增加了另一种选择。 – CrazyCasta
由此可能会导致一些严重的同步问题。如果你超时,套接字是关闭的,还是我错过了什么? –
您可以使用两个不同的端口,一个用于监听,另一个用于写入。并使用不同的线程来执行操作,那么while(true)循环不会产生问题。
这是一个套接字的功能......它已经支持全双工。 –
看看FTP协议规范。它使用两个套接字/通道,一个用于命令,另一个用于数据。
这不是必需的。一个套接字足以在两个单独的通道上发送和接收数据。 –
请编辑您的帖子以提供有关您的工作的更多详情。你有什么尝试?你做了什么研究?什么代码不起作用? – Gray
这只是一个问题 - 请参阅@CrazyCasta答案。 Tx/rx流是独立的,可以从一个线程读取,而从另一个线程写入很好。 –
R/W同时是TCP的全双工定义。 – irreputable