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

时间:2012-07-09 07:42:29

标签: 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()

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

2 个答案:

答案 0 :(得分:5)

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

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

我会传递对创建类的引用,这样如果线程接收到信息,父类就可以使用它。

答案 1 :(得分:0)

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

Have a look at the documentation