4

EOFException在使用readUTF()方法时遇到以下问题,请让我知道如何解决这个问题,还请建议如何readUTF()通过其他网络传输套接字信息

import java.io.*;
import java.net.*;

public class GreetingServer {
    public static void main(String args[]) {
        String servername =args[0];
        int port = Integer.parseInt(args[1]);

        try {
            System.out.println("Server Name "+ servername +"Port"+port);

            Socket client = new Socket(servername,port);
            System.out.println("Just connected to"+ client.getRemoteSocketAddress());
            OutputStream outs = client.getOutputStream();
            DataOutputStream dout = new DataOutputStream(outs);
            dout.writeUTF("Hello From"+client.getRemoteSocketAddress());
            InputStream in = client.getInputStream();
            DataInputStream din = new DataInputStream(in);
            System.out.println("Server Says"+ din.readUTF());
            client.close();
        }
        catch (EOFException f) {
            f.printStackTrace();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
    }
}
4

2 回答 2

6

您已到达流的末尾。没有更多数据要读取。

可能您的服务器没有使用writeUTF(),或者您与它不同步。如果服务器正在编写您应该使用的行BufferedReader.readLine().

于 2013-08-08T22:35:26.923 回答
1

状态文档;_readUtf()

首先,读取两个字节并使用 readUnsignedShort 方法的方式构造一个无符号的 16 位整数。这个整数值称为 UTF 长度,并指定要读取的附加字节数。然后通过分组考虑将这些字节转换为字符。每个组的长度是根据组的第一个字节的值计算的。组后面的字节(如果有的话)是下一组的第一个字节。

这向我表明,您尝试使用 readUtf() 读取的内容不是 UTF,因为在意外读取文件结尾 (EOF)EOFException时会发生这种情况。

检查您是否按照服务器发送它们的顺序读取正确的类型等。您应该遵循确定的协议,而不是盲目阅读。

于 2013-07-31T13:57:39.283 回答