2014-12-04 91 views
1

我试图通过BufferedReader和Buffered Writer进行客户端/服务器套接字连接,但读者不读取任何东西,只是挂起,客户端发送和正确刷新。 服务器不会抛出任何异常,如果客户端不向服务器发送任何东西。Java套接字BufferedReader读取不读

我的头会去爆炸......

进出口使用相同的客户端和服务器:

in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 

这里是服务器的代码:

//inside of try catch 
while(true){ 
      while(!in.ready())// just to debug 
      System.out.println("READY: " + in.ready()); //just to debug 
      System.out.println("READY: OK"); //just to debug 
      msg = receive().toString(); //hangs here... 
      System.out.println("KEYIS: " + msg); 
      ///some stuff to do .... 

public StringBuilder receive() throws IOException { 
    StringBuilder str = new StringBuilder(); 
    int tmp; 
    while(true){ 
     tmp = in.read(); 
     if(tmp == 0) 
      break; 
     else if(tmp == -1) 
      throw new IOException(); 
     str.append((char)tmp); 
    } 
    return str; 
} 

客户端代码:不挂在这里

//inside of try catch 
     send(KEY); //sended properly, no exception 
     while(true){ 
      send(KEY); // sended properly, no exception 
      System.out.println("sent"); 
      //System.out.println(receive().toString()); 
     } 

public void send(String str) throws IOException{ 
    out.write(str + "\n"); // 
    //out.newLine(); //tried too, not helped 
    out.flush(); //push message to server 
} 
+1

为什么你使用BufferedReader?尝试删除它,这应该有所帮助。 – vbezhenar 2014-12-04 22:20:27

回答

1

服务器等待if(tmp == 0)这是0是零,客户端永远不会发送它。
我想你正在等待\n它不是0,它是10(换行)。
只是想知道为什么你不使用DataOutputStream#writeUTF()DataInputStream#readUTF()

+0

\ 0用于确定数据的结尾,-1表示连接出现错误。 – Bob 2014-12-05 00:26:52

+0

readUTF无法通过lua程序解析,也将连接到服务器 – Bob 2014-12-05 00:27:25

+0

@Bob不,IOException *表示连接出错。 -1表示对等体已关闭连接。没有错误。 – EJP 2014-12-05 00:45:22

1

您正在编写代码行,但是您有一个非常毫无意义且精细且非常错误的输入方法,它不会实际读取行,并且会在流结束时引发错误的异常。

尝试BufferedReader.readLine(),不要忘记测试null。

+0

我必须传递可能包含\ n \ r个字符的数据,因此无法使用readLine – Bob 2014-12-05 00:25:20

+0

因此,请使用'BufferedInputStream.read()',然后不要使用'String'作为二进制数据的容器。 – EJP 2014-12-05 00:44:34

0

问题解决了......所以愚蠢的错误......我只是忘了添加一个\ 0,以确定消息的,所以收到方法等待仿佛更多的数据来结束...