使用Java从客户端套接字读取数据

Red*_*low 2 java sockets

我编写了从客户端套接字发送/接收数据的代码.发送数据步骤已成功完成,但是当我想从套接字读取数据时,readLine()方法阻止程序,而没有要读取的数据.

这是我的代码:

StringBuffer document = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
     document.append(line + "\n");
reader.close()
Run Code Online (Sandbox Code Playgroud)

感谢所有我可以读取所有收到的数据,但readLine或read(byte [],int,int)方法在没有数据要读取时阻塞程序,而此方法必须在此时返回null/-1.

Nat*_*ite 5

那是因为该readLine()函数是一个阻塞调用,所以当然它会阻塞.

为了更具建设性,对类似方法的调用readLine()应该在一个单独的线程中,以便阻塞调用不会影响代码的其余部分.从正在阅读的类中,我建议创建一个纯粹用于控制从套接字读取的线程.

我将传递对创建类的引用,以便在线程接收信息时,父类可以使用它.