我一直在尝试让一个简单的网络测试程序运行,但没有结果。
服务器:
import java.io.*;
import java.net.*;
public class ServerTest {
public static void main(String[] args) {
final int PORT_NUMBER = 44827;
while(true) {
try {
//Listen on port
ServerSocket serverSock = new ServerSocket(PORT_NUMBER);
System.out.println("Listening...");
//Get connection
Socket clientSock = serverSock.accept();
System.out.println("Connected client");
//Get input
BufferedReader br = new BufferedReader(new InputStreamReader(clientSock.getInputStream()));
System.out.println(br.readLine());
br.close();
serverSock.close();
clientSock.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
客户:
import java.io.*;
import java.net.*;
public class ClientTest {
public static void main(String[] args) throws IOException {
final int PORT_NUMBER = 44827;
final String HOSTNAME = "xx.xx.xx.xx";
//Attempt to connect
try {
Socket sock = new Socket(HOSTNAME, PORT_NUMBER);
PrintWriter out = new PrintWriter(sock.getOutputStream(), true);
//Output
out.println("Test");
out.flush();
out.close();
sock.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
当我使用127.0.0.1或内部IP作为主机名时,该程序运行良好。但是,每当我切换到外部IP地址时,都会引发
java.net.ConnectException: Connection refused: connect
错误。我特意选择了一个不常见的端口,以查看是否是问题所在,但没有运气。
使用telnet可以毫无问题地进行连接,但是当我尝试使用canyouseeme.org访问端口时,它表明连接超时。
我什至尝试禁用所有防火墙和防病毒软件,包括Windows默认防火墙和路由器防火墙,并转发所有端口并启用DMZ,但它仍说连接超时。我将Comcast用作我的ISP,并且怀疑它们是否会阻塞这样的随机端口。
当我使用数据包跟踪器时,它显示我的计算机发送SYN并接收RST/ACK时的TCP流量,因此它看起来像是标准的受阻止端口,并且没有其他可疑的数据包流量在进行。
我不知道这是怎么回事。我几乎已经尝试了我所知道的所有技巧。如果有人知道为什么端口可能被阻塞,或者至少以某种方式使程序正常工作,那将非常有帮助。
最佳答案
对于它的值(value),您的代码在我的系统上可以正常工作。
我不想这么说,但这听起来像是防火墙问题(我已经知道您已经对它进行了三重检查)或Comcast issue,这比您想象的要多。我会test your ISP。