为什么我的客户端套接字不能连接到我的ServerSocket?

在这个非常基本的客户端/服务器套接字程序中,为什么我的客户端套接字从不连接并抛出java.net.ConnectException ? 我在一台计算机上运行MessageServer程序,在同一networking上的另一台笔记本电脑上运行ClientServer程序。 我已经validation,正在运行服务器程序的计算机的本地IP是10.0.0.1在该计算机上的Windows cmd中使用ipconfig命令。

服务器:

 package server; import java.net.*; import java.io.*; public class MessageServer { public static void main(String args[]) { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(4302); } catch (Exception e) { System.out.println("well bad news..."); } boolean noConnection = true; while(noConnection == true) { try { Socket client = serverSocket.accept(); System.out.println("socket connection accepted:" + client.getRemoteSocketAddress().toString()); noConnection = false; } catch (IOException e) { // TODO Auto-generated catch block System.out.println("fail"); } } } } 

客户:

 import java.net.*; import java.io.*; public class MessageClient { public static void main(String args[]) { Socket clientSocket = null; String recieve; try { clientSocket = new Socket("10.0.0.1", 4302); } catch (Exception e) { System.out.println("deal with it..."); e.printStackTrace(); } } } 

当我运行这两个程序时,我在客户机上得到以下结果:

 java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) at java.net.AbstractPlainSocketImpl.connect(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at MessageClient.main(MessageClient.java:10) 

服务器上没有问题。

编辑:我试图禁用我的互联网安全(诺顿360),没有帮助。 另外,我正在运行(在两台计算机上)Windows 10,Java 8 Update 65,Eclipse IDE Mars 1

编辑2:万一它有帮助,我试图在一台计算机上运行这两个程序的部分,这个工程。 所有的迹象都指向了Windows防火墙的问题。 我会尽力去尽快解决这个问题。

Solutions Collecting From Web of "为什么我的客户端套接字不能连接到我的ServerSocket?"

不要紧,你的电脑的本地IP是什么。 您的服务器正在本地主机上运行,​​因此您需要连接到本地主机。

改变这个

 clientSocket = new Socket("10.0.0.1", 4302); 

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

当您在VPS上托管服务器时,您可以将本地主机更改为VPS的IP。

您也可以使用“127.0.0.1”代替“localhost”。

编辑根据你现在得到的例外,

当服务器没有在你试图连接的端口上侦听时,会发生异常。

要么你没有启动你的服务器或服务器不接受连接或客户端和服务器端口号是不同的。

编辑2

由于您在不同的PC(假设不同的网络)上运行客户端和服务器,您将需要将您的路由器端口转接到接受连接。

更多关于端口转发的信息

另外,您可以使用本网站来帮助您进行端口转发。 转发端口

好的,我终于明白了这个问题。 只要把这个答案提供给那些遇到同样问题的人。 在创建客户端套接字时,您也需要直接指定本机的本地ipv4。 出于某种原因,本地主机不允许它连接,并说连接被拒绝的LAN连接。 所以EX代码:

 Socket client = new Socket("10.0.0.8", 5566); 

代替:

 Socket client = new Socket("localhost" 5566); 

如果您正在查找ipv4,请在服务器计算机上,打开CMD(窗口),然后键入ipconfig 。 然后在Ethernet adapter Local Area Connection:使用IPv4地址下列出的地址。