【问题标题】:cannot connect client to server in java无法在java中将客户端连接到服务器
【发布时间】:2015-02-08 11:34:59
【问题描述】:

我还是个新手,我相信这个问题已经被问过很多次了。 我在 java 中创建了一个客户端服务器工具,当我在同一台机器上运行它时它运行得非常好。 但是当我尝试在另一台机器上但在同一个网络上运行客户端时,它不会连接到服务器。 所以有人可以告诉我我可以尝试/做些什么来纠正它。

谢谢。

来自客户端的代码 sn-p:

serverIP = String.valueOf(InetAddress.getLocalHost().getHostAddress());
int Port = 5000;

.
.
.
try 
            {
                sock = new Socket(serverIP, Port);
                InputStreamReader streamreader = new InputStreamReader(sock.getInputStream());
                reader = new BufferedReader(streamreader);
                writer = new PrintWriter(sock.getOutputStream());
                writer.println(username +":"+ encPassword+":has connected"+":Connect"); // Displays to everyone that user connected.
                writer.flush(); // flushes the buffer
                isConnected = true; // Used to see if the client is connected.
            }
            catch (Exception ex) 
            {
                chatTextArea.append("Cannot Connect! Try Again. \n");
                System.err.println(ex.getMessage());
                usernameField.setEditable(true);
                pass.setEditable(true);
            }
        ListenThread();
.
.
.

public void ListenThread() 
{
     Thread IncomingReader = new Thread(new IncomingReader());
     IncomingReader.start();
}

来自服务器的代码 sn-p:

public void run() 
    {
        clientOutputStreams = new ArrayList();
        onlineUsers = new ArrayList();  
        try 
        {
            ServerSocket serverSock = new ServerSocket(5000);
        while (true) 
            {
                // set up the server writer function and then begin at the same
                // the listener using the Runnable and Thread
                Socket clientSock = serverSock.accept();
                PrintWriter writer = new PrintWriter(clientSock.getOutputStream());
                clientOutputStreams.add(writer);
                // use a Runnable to start a 'second main method that will run
                // the listener
                Thread listener = new Thread(new ClientHandler(clientSock, writer));
                listener.start();
                outputPane.append("Got a connection. \n");
    } // end while
        } // end try
        catch (Exception ex)
        {
            outputPane.append("Error making a connection. \n");
        } // end catch
}

【问题讨论】:

  • '它没有连接到服务器'通常意味着你应该得到一个异常,它应该让你大致了解它为什么无法连接。
  • 连接被拒绝。

标签: java client server


【解决方案1】:

我认为你的问题是客户端仍然试图连接到它正在运行的机器:

serverIP = String.valueOf(InetAddress.getLocalHost().getHostAddress());

serverIP 应该得到远程机器的值(最好使用一些配置)..

【讨论】:

  • @AkshayAgarwal Try serverIP = '您尝试连接的服务器的 ip'
  • 客户端机器需要服务器机器地址(ip)。该地址需要分配给“serverIp”变量。您可以使用 ipconfig (windows) \ ifconfig (unix\linux) 命令获取服务器机器中的网络详细信息。
  • 如果服务器ip不断变化怎么办?是否有任何动态方法来获取服务器 ip 并使用它而不是预先对服务 ip 进行硬编码。
  • 您可以将您的服务器代码部署到一些免费的托管解决方案,这些解决方案为您提供一个临时域(如 heroku 或 google)。当您的应用准备好大规模生产时,您很可能希望连接到负载均衡器。
  • 所以最后我必须为它提供一个硬编码的服务器IP。感谢大家的快速和信息丰富的输入和建议。我想我终于可以让它工作了。
猜你喜欢
  • 1970-01-01
  • 2014-11-19
  • 2022-01-21
  • 2016-07-07
  • 2020-06-17
  • 2022-01-25
  • 2012-10-15
相关资源
最近更新 更多