为什么DataInputStream.readUTF()导致主线程永远等待? [套接字编程]

时间:2017-01-03 04:19:59

标签: java sockets serversocket datainputstream

我有一个用Java编写的小套接字服务器。我的应用程序基本上从Socket读取数据并将其写入输出。无论如何,当我尝试使用readUTF()函数从Socket读取数据时,它只是导致主线程等待,然后在第二个连接处给出EOFException但是如果我使用DataInputStream.readLine()函数它正在工作。< /强>

我的代码readUTF()

private static PrintStream console = System.out;

public static void main(String[] args) throws IOException{
    // TODO Auto-generated method stub
    ServerSocket serverSocket = new ServerSocket(5112);
    console.println("Server Started !");
    while(true){
        console.println("Loop");
        Socket client = serverSocket.accept();

        console.println("Processing Request");
        DataInputStream in = new DataInputStream(client.getInputStream());
        console.println("Proccessing in");
        console.println("Available : " + in.available());
        console.println("Request Body : \n");
        String str = in.readUTF(in);
        console.println(str);
        console.println("Waiting for new !");
    }
}

输出是:

Server Started ! Loop Processing Request Proccessing in Available : 0 Request Body :

1 个答案:

答案 0 :(得分:2)

readUTF()读取二进制编码流,而不是文本数据。因此,由于编码,代码可能需要数千个字符。

请参阅readUTF()文档。