使用readUTF的EOFException DataInputStream

Ale*_*ani 2 java eofexception datainputstream

我编写了一个简单的服务器来监听客户端,当客户端连接时,它打开一个Datainputstream,读取客户端发送的所有数据(我的客户端的UTF数据).

这是ServerCode:

    @Override
public void run() {
    // TODO Auto-generated method stub  
    try {           
        ServerSocket ss = new ServerSocket(7000);
        while(true){
        System.out.println("Il Server sta cercando Connessioni");
        Socket s = ss.accept();
        System.out.println("Il Server ha accettato un Client");

        Thread t2 = new Thread(new Runnable(){
            public void run(){             
                   try {
                    while(true){
                    DataInputStream dis = new DataInputStream(s.getInputStream());
                    isAlreadyOpened = true;                     
                    System.out.println(dis.readUTF());
                    }

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                    isAlreadyOpened = false;
                }  
            }           
        });
        if(!isAlreadyOpened){
        t2.start();
        }
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

它是非常基本的,我的客户端是一个Andorid应用程序,在单击按钮时发送数据:

 @Override
public void onClick(View v) {
    try {
        DataOutputStream out = new DataOutputStream(s.getOutputStream());
        out.writeUTF("Testiamo sto socket");
        out.flush();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

}
Run Code Online (Sandbox Code Playgroud)

当客户端连接到服务器时,一切都很完美.但是当我只点击一次客户端按钮时,发送的数据会显示在我的服务器日志中,但是在抛出异常后立即显示.

Il Server sta cercando Connessioni
Il Server ha accettato un Client
Il Server sta cercando Connessioni
Testiamo sto socket
java.io.EOFException
   at java.io.DataInputStream.readUnsignedShort(Unknown Source)
   at java.io.DataInputStream.readUTF(Unknown Source)
   at java.io.DataInputStream.readUTF(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

从Oracle文档中读取此异常将被抛出<>.但是我怎么能避免这个呢?

use*_*421 7

您正在发送一个字符串,然后关闭连接.您正在尝试阅读无限多的字符串.它们没有被发送.你得到的是预期的 EOFException.

这里没有问题需要解决.如果需要在同一连接上发送更多字符串,请不要在发送后再关闭它.

  • 哦,谢谢你的答案..我没有得到它.我认为连接没有关闭因为服务器端的一切都很好..问题是客户端在刷新输出流后关闭了套接字.我只是删除了dos.close(),一切正常..非常感谢 (2认同)