Java 在CMD下运行客户端类时出现客户端-服务器连接错误,但使用netcat命令可以正常工作

Java 在CMD下运行客户端类时出现客户端-服务器连接错误,但使用netcat命令可以正常工作,java,connection,client-server,Java,Connection,Client Server,我有一个服务器类,它扩展了线程,正在等待端口888上的连接: public void run() { // Create our server and create / accept incoming connections try { ServerSocket serverSocket = new ServerSocket(serverPortNumber); while (true) {

我有一个服务器类,它扩展了线程,正在等待端口888上的连接:

public void run() {
        // Create our server and create / accept incoming connections
        try {
            ServerSocket serverSocket = new ServerSocket(serverPortNumber);
            while (true) {
                // Listen for incoming connections and craete connection with accept
                System.out.println("Waiting for client connection.... on localhost port " + serverPortNumber
                        + ". \n Client connect via netcat localhost 8818");

                Socket clientSocket = serverSocket.accept();// returns a client Socket object
                System.out.println("Conenction established with " + clientSocket);

                // Each new connection will be handled on a new thread and can run concurrenlty
                ManageMultipleConnections multipleConnections = new ManageMultipleConnections(this, clientSocket);
                clientList.add(multipleConnections);
                multipleConnections.start();
            }
        } catch (IOException error) {
            error.printStackTrace();
        }
I如果启动CMD,则使用netcat建立连接,如下所示:

nc localhost 8818
从中返回套接字

Socket clientSocket = serverSocket.accept();
然后将clientSocket添加到MangeMultipleCOnnections类,该类也是一个线程

 ManageMultipleConnections multipleConnections = new ManageMultipleConnections(this, clientSocket);
                        clientList.add(multipleConnections);
                        multipleConnections.start();
ManageMultipleSections然后获取客户端的输入和输出流,并处理通信:

clientInput = clientSocket.getInputStream();
        clientoutput = clientSocket.getOutputStream();
        writer = new PrintWriter(clientoutput, true);
对于多聊天服务器-客户机,这一切都可以正常工作,其中每个客户机连接都是通过netcat建立的

但是,如果我试图通过在CMD上运行java客户端类,在同一本地主机端口888上与服务器建立连接:

java testClient
一旦执行了serverSocket.accept(),连接就会立即关闭。 clientConnection类:

public static void main(String[] args) {
        // connects to a well know time server on port 13 and gets data back in tme

        Socket socket;

        String hostname;

        if (args.length > 0) {
            hostname = args[0];
        }else {
            hostname = "localhost";
        }


        try {
            System.out.println("Trying to connect to " + hostname + " on port " + 8818);
            socket = new Socket(hostname, 8818);
            System.out.println("Connected on " + socket.getInetAddress() + " " );
        }catch(UnknownHostException e) {
            System.out.println("Cant connect to " + hostname);
        }catch(IOException e) {
            e.printStackTrace();
        }

    }
例外情况:

java.net.SocketException:对等方重置连接:套接字写入错误

因此,我无法再通过CMD与客户通信。 欢迎您的任何意见

更多信息: 在此处的ManageMultipleConnections线程中引发异常:

clientInput = clientSocket.getInputStream();
        clientoutput = clientSocket.getOutputStream();
        writer = new PrintWriter(clientoutput, true);

try {
            if (loginMessage == null) {
                clientoutput.write((message).getBytes());
            } else {
                clientoutput.write((message).getBytes());
                clientoutput.write((loginMessage).getBytes());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

哪一方抛出此异常?无论是哪种类型,对等方都会在不读取其输入的情况下关闭连接。例如,这个客户机甚至都懒得关闭套接字。@user207421请参阅其他信息,它似乎是在尝试写入输出流时抛出的。是的,所以这一切与我前面所说的完全一样。