Java socket BufferedReader读取不读取

时间:2014-12-04 22:14:32

标签: java sockets

我试图通过BufferedReader和Buffered Writer建立客户端/服务器套接字连接,但读者没有阅读任何内容,只是被挂起,客户端发送和刷新正常。 服务器不会抛出任何异常,就像客户端没有向服务器发送任何内容一样。

我的脑袋会爆炸......

我对客户端和服务器使用相同的内容:

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
}

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

你正在写行,但是你有一个非常毫无意义,精心设计且非常错误的输入法,它实际上并不读取行,并且在流的末尾会抛出错误的异常。

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

答案 2 :(得分:1)

LEAD()

答案 3 :(得分:0)

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