Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java socket BufferedReader读取未读取_Java_Sockets - Fatal编程技术网

Java socket BufferedReader读取未读取

Java socket BufferedReader读取未读取,java,sockets,Java,Sockets,我试图通过BufferedReader和BufferedWriter建立一个客户机/服务器套接字连接,但读卡器没有读取任何东西,它只是挂起,在那里客户机正确发送和刷新。 服务器不会抛出任何异常,就好像客户端不向服务器发送任何内容一样 我的头要爆炸了 Im对客户端和服务器使用相同的功能: in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new BufferedWriter(new Outp

我试图通过BufferedReader和BufferedWriter建立一个客户机/服务器套接字连接,但读卡器没有读取任何东西,它只是挂起,在那里客户机正确发送和刷新。 服务器不会抛出任何异常,就好像客户端不向服务器发送任何内容一样

我的头要爆炸了

Im对客户端和服务器使用相同的功能:

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
}

服务器等待
如果(tmp==0)
0
为nil,客户端从不发送它。
我想您正在等待
\n
它不是0,而是10(换行)。

我只是想知道为什么不使用
DataOutputStream#writeUTF()
DataInputStream#readUTF()

您正在写行,但您有一个非常无意义、复杂且有缺陷的输入方法,它实际上不读取行,并且在流的末尾抛出错误的异常


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

解决了问题。。。这么愚蠢的错误。。。我忘了添加一个\0来确定消息的结尾,所以Receive方法正在等待,好像有更多的数据来了…

为什么要使用BufferedReader?试着删除它,这应该会有帮助。根据下面的海报,这是由打字错误造成的,不可复制。我投票决定结束这个问题。我必须传递可能包含\n\r字符的数据,因此不能使用ReadLine,因此请使用
BufferedInputStream.read()
,并且不要使用
String
作为二进制数据的容器。\0用于确定数据的结尾,-1表示连接中有错误。将连接到服务器的lua程序无法解析readUTFtoo@Bob否,
IOException
表示连接中存在错误-1表示对等方已关闭连接。没有错误。
    StringBuffer sb = new StringBuffer();
    int i;
    while ((i = bi.read()) != -1) {
        char c = (char) i;
        sb.append(c);
        
    }
    return sb.toString();