在这个非常基本的客户端/服务器套接字程序中,为什么我的客户端套接字永远不会连接并抛出java.net.ConnectException
?我在一台计算机上运行MessageServer程序,在同一网络上的另一台笔记本电脑上运行ClientServer程序。我已经验证了运行服务器程序的计算机的local-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防火墙问题。我会尽快尝试解决这个问题。
答案 0 :(得分:0)
计算机的本地IP是什么并不重要。您的服务器在localhost上运行,因此您需要连接到localhost。
将此更改为
clientSocket = new Socket("10.0.0.1", 4302);
到
clientSocket = new Socket("localhost", 4302);
当您在VPS上托管服务器时,您可以将localhost更改为VPS的IP。
您也可以使用&#34; 127.0.0.1&#34;代替&#34; localhost&#34;。
修改强> 根据您现在获得的例外情况,
当服务器未侦听您尝试连接的端口时,会发生异常。
您尚未启动服务器或服务器不接受连接或客户端和服务器上的端口号不同。
编辑2
由于您在不同的PC上运行客户端和服务器(假设网络不同),您需要将您的路由器移植到接受连接。
有关端口转发的更多信息here
此外,您可以使用此网站来帮助您进行端口转发。 Port Forwarding