连接重置错误(服务器/客户端) - 使用ObjectOutputStream类

时间:2016-06-02 11:59:47

标签: java

我试图在服务器和多个客户端之间建立连接,但即使对于一个客户端也不起作用。我想要做的就是使用ObjectOutputStream类从客户端发送一个对象。连接在开始时成功完成,但是当我尝试将对象发送到服务器时,它失败了。

这是客户端部分,它是用类的主方法编写的:

              Socket socket;
              OutputStream out;
              ObjectOutputStream fout;
              boolean connected=false;

              if (!connected) {
                    try {
                        socket = new Socket("localhost", 8000);
                        out = socket.getOutputStream();
                        fout = new ObjectOutputStream(out);
                        fout.flush();
                        connected = true;
                        fout.writeObject(ac1);//ac is an object of Plane class
                    } catch (Exception ex) {
                        System.out.println(ex.toString());

                    }
                }

这是服务器:

public class server {
static class ServerThread implements Runnable {
    Socket client = null;

    public ServerThread(Socket c) {
        this.client = c;
    }
    public void run() {
        try {
           System.out.println("Connected to client : "+client.getInetAddress().getHostName());
           Plane ac=null;
           InputStream in=client.getInputStream();
           ObjectInputStream fin=new ObjectInputStream(in);
            while(client.isConnected()){
                ac = (Plane)fin.readObject();
                System.out.println(ac.toString());

            }
            client.close();
        } catch (Exception e) {
           // System.err.println(e.getMessage());
            e.printStackTrace();
        }
    }
    }
    public static void main(String args[]) {
        try {
            ServerSocket server = new ServerSocket(8000);
            while (true) {
                Socket p = server.accept();
                new Thread(new ServerThread(p)).start();
            }
        } catch (Exception ex) {
            System.err.println("Error : " + ex.getMessage());
        }
    }
}

有谁能告诉我这是什么问题?

1 个答案:

答案 0 :(得分:0)

您的客户端永远不会关闭套接字,并且可能会退出,因此重置连接。所以关闭套接字。

NB isConnected()不是有效的循环条件。它永远不会变得虚假。当EOFExceprion被捕获时,你的循环应该终止。