繁体   English   中英

从Java中的客户端套接字读取数据

[英]Read data from a client socket in Java

我已经编写了用于从客户端套接字发送/接收数据的代码。 发送数据步骤已成功完成,但是当我想从套接字读取数据时, 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()

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

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

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

我将传递对创建类的引用,以便如果线程接收信息,则父类可以使用它。

BufferedReader有一个名为“ ready()”的方法,当准备好接收数据时该方法返回true。 如果不想在“ readLine()”调用中被阻止,请首先检查是否准备好读取数据。

看一下文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM