2013-10-31 97 views
0

我正在尝试学习java套接字编程,但是我在InputStream的读取功能方面遇到了问题。 首先,我创建了一个连接到服务器的套接字。建立连接后,服务器将发回“连接已建立”的消息,并且读取功能正常工作。然后我尝试向服务器发送字节消息,但是我无法从InputStream读取数据,因为我的程序停留在“in.read(buf)”行。任何人都可以指出我如何解决这个问题。无法从InputStream中读取数据

Socket client = new Socket("xxx.xxx.xxx.xxx", 45000); 
    InputStream in = client.getInputStream(); 
    OutputStream out = client.getOutputStream(); 
    for (int i = 0; i < 5; i++) { 
     byte[] buf = new byte[1024]; 
     int data_size = in.read(buf); 
     String msg = ""; 
     for (int j = 0; j < data_size; j++) { 
      msg += String.valueOf((char) buf[i]); 
     } 
     System.out.println(msg); 
     out.write(65); 
     out.flush(); 
    } 
+1

卡住读取的最常见原因是无法发送任何数据。你能告诉我们你的写作代码吗?你确定知道至少有5 KB的数据发送? –

+0

http://www.javaworld.com/jw-12-1996/jw-12-sockets.html?page=3 – ajc

回答

1

InputStream.read()是一个阻塞调用。考虑到你提供的代码,在写入套接字之前,你正在从套接字读取数据,所以你将永远阻止第一次读取。或者至少在超时之前。

-1

@Peter可能是正确的。另外,在使用它们之后关闭流可能有助于避免意外问题。

+0

未关闭不会导致读取失败。 – EJP