我正在尝试编写一个非常简单的套接字程序,我基本上想要的是客户端在 while(true) 循环中不断侦听来自服务器的通信。现在我还希望客户端能够在监听的过程中将一些数据发送回服务器。
我能想到的唯一解决方案是为读取和写入创建一个线程,并在每次我必须进行写入时中断读取线程。
有更好的解决方案还是这是我能做到的唯一方法
我正在尝试编写一个非常简单的套接字程序,我基本上想要的是客户端在 while(true) 循环中不断侦听来自服务器的通信。现在我还希望客户端能够在监听的过程中将一些数据发送回服务器。
我能想到的唯一解决方案是为读取和写入创建一个线程,并在每次我必须进行写入时中断读取线程。
有更好的解决方案还是这是我能做到的唯一方法
您可以使用两个线程。一个用来读,一个用来写。这样写线程可以随时写(不需要停止读取)。
另一种方法是setSoTimeout(timeoutMs)
在调用 read 之前在套接字上使用。如果读取时间超过 timeoutMs 毫秒,这将导致它抛出一个SocketTimeoutException
错误,从而允许您随心所欲地编写。
查看 FTP 协议规范。它使用两个套接字/通道来完成您打算做的事情,一个用于命令,一个用于数据。
您可以使用两个不同的端口,一个用于侦听,一个用于写入。并使用不同的线程来执行操作,那么您的 while(true) 循环不会产生问题。