【问题标题】:Server is not connecting服务器未连接
【发布时间】:2016-04-21 19:22:11
【问题描述】:

我有一个名为startServerConnection()void 方法,它将服务器连接到一个端口,在本例中为7777。此方法在另一个类中的按钮ClientGUI 的动作侦听器中调用。

我很确定代码是正确的,但由于某种原因,我得到的唯一输出是"Waiting for connection..."

    public void startServerConnection(){
        try{
            serverSocket = new ServerSocket(portNumber);

            while(true){
                System.out.println("Waiting for a connection...");
                Socket clientSocket = serverSocket.accept();
                System.out.println("Connection established on port: "+clientSocket.getLocalPort());
                ClientConnection clientConnection = new ClientConnection(clientSocket);
                Thread thread = new Thread(clientConnection);
                thread.start();
            }   
        }
        catch(Exception e){
            e.printStackTrace();
            return;
        }
    }

编辑 客户端类,connectClient方法:

    public void connectClient(String user){
        try{
            host = clientSocket.getInetAddress();
            clientSocket = new Socket(host,port);
            new ClientHandler(clientSocket).run();
            String accepted = "Connection for host "+host+" accepted on port: "+clientSocket.getPort();
        }
        catch(Exception e){
            //sendMessage("Connection error: "+e);
            //serverGUI.appendEventsLog("Client "+new ClientGUI(username, port)+" failed to connect");
        }

    }

有什么想法吗?

【问题讨论】:

  • 服务器无法连接。客户端连接;服务器接受。如果您的服务器永远不会离开accept(),那么客户端一定会遇到异常。它是什么?注意,您不会通过注释掉唯一可以告诉您的代码来找出答案。并且不要破坏您自己的帖子。

标签: java sockets server serversocket


【解决方案1】:

更新:

public void connectClient(String user){
    try{
        clientSocket = new Socket(host,port);
        // Use PrintWriter to send data out to server
        // Use BufferedReader to receive data from server
    }
    catch(Exception e){
        //sendMessage("Connection error: "+e);
        //serverGUI.appendEventsLog("Client "+new ClientGUI(username, port)+" failed to connect");
    }
}

host 是 IP 地址或主机名,如果服务器/客户端在同一台机器上运行,您可以使用“127.0.0.1”或“localhost”;端口是int 的值,在你的情况下是7777

原文:

accept() 是一个阻塞函数。之后的代码在建立连接之前不会彻底。

您必须建立一个客户端并请求连接,一旦服务器和客户端连接,您将看到“在端口上建立连接..”

public Socket accept() 抛出 IOException

侦听要与此套接字建立的连接并接受它。该方法会一直阻塞,直到建立连接。

【讨论】:

  • 是的,我也在阅读您刚刚发送给我的链接。消息的编写我将在另一个处理每个客户端实例的类中完成。我很难理解host。应该是用户名还是 IP 地址?
  • 我认为 host 是 IP 地址,因此 host.getInetAddress() 并将其传递到套接字中。
  • 好吧最后一件事,所以你建议我像这样调用 clientsocket:Socket clientSocket = new Socket("localhost", 7777); ?
猜你喜欢
  • 1970-01-01
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多