【问题标题】:Client-Server using socket: Exception in thread "main" java.io.EOFException使用套接字的客户端-服务器:线程“主”java.io.EOFException 中的异常
【发布时间】:2017-03-18 21:26:33
【问题描述】:

我正在编写简单的客户端-服务器程序,其中服务器正在侦听所有传入连接并接受它们。一旦接受,客户端将数据(整数)发送到服务器,服务器将整数回显给客户端。这部分工作正常。 此外,客户端在已建立的连接上连续发送数据(使用 while 循环),这就是我遇到“java.io.EOFException”异常的地方。

服务器

监听端口:3344

收到:1 份来自客户

监听端口:3344

客户

输入要发送的数据: 1

服务器回复:1

输入要发送的数据: 2

线程“主”java.io.EOFException 中的异常 在 java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2626) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1321) 在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) 在 Node.main(Node.java:28)

客户端代码

    int serverPort = 3344;
    Scanner sc = new Scanner(System.in);

    Socket clientSocket = new Socket("localhost", serverPort);

    ObjectOutputStream write = new ObjectOutputStream(clientSocket.getOutputStream());
    ObjectInputStream read = new ObjectInputStream(clientSocket.getInputStream());
    Integer writeData = new Integer(0);

    while (true) {
        System.out.println("Enter Data to send: ");
        writeData = sc.nextInt();

        write.writeObject(writeData);
        write.flush();
        Integer obj = (Integer) read.readObject();
        if (obj.intValue() == -1) {
            break;
        }
        System.out.println("Server replied : " + obj.toString());
        System.out.println();
    }

    write.close();
    read.close();

    clientSocket.close();

服务器代码

        while (true) {
        System.out.println("listening on port : " + listenPort);
        try {
            clientSocket = listener.accept();

            write = new ObjectOutputStream(clientSocket.getOutputStream());
            read = new ObjectInputStream(clientSocket.getInputStream());

            int readInt = (Integer) read.readObject();

            System.out.println("Received : " + readInt + " from client");

            write.writeObject((Object) readInt);
            write.flush();

            //break;
        }
        finally {
            write.close();
            read.close();
            clientSocket.close();
            //listener.close();
        }

【问题讨论】:

  • 此时服务器是否还活着并工作?也许它不再响应了。
  • 是的。使用服务器控制台输出更新帖子。

标签: java client-server eofexception


【解决方案1】:

您的客户端连接到服务器外部循环,您的服务器关闭客户端连接内部循环。

这意味着客户端尝试将数据写入属于已关闭连接的输出流。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多