【问题标题】:Why DataInputStream.readUTF() causing Main Thread to wait forever ? [Socket Programming]为什么 DataInputStream.readUTF() 导致主线程永远等待? 【套接字编程】
【发布时间】:2023-04-04 10:33:01
【问题描述】:

我有一个用 Java 编写的小型 Socket 服务器。我的应用程序基本上从 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 :

【问题讨论】:

    标签: java sockets serversocket datainputstream


    【解决方案1】:

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

    请参阅readUTF() 文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      • 2017-07-19
      • 1970-01-01
      相关资源
      最近更新 更多