我正在编写一个简单的测试Java程序,使用Socket测试本地计算机上哪个端口可用于TCP服务。这是我的代码:
for (int i = 0; i < 1024; i++) {
try {
//test availability
InetAddress addr = InetAddress.getLocalHost();
Socket s = new Socket(addr, i);
System.out.println("There is a server on port " + i + "of localhost.");
} catch (IOException e){
e.printStackTrace();
break;
}
}
跑步的时候我得到了:
java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine
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 main.PortScanner.main(PortScanner.java:19)
我是Socket的新手。我是否需要启动一个Socket服务器来响应我的任务? 或者我应该如何扫描我的端口呢? 谢谢你的回答。
答案 0 :(得分:1)
您正在尝试建立到端口0的客户端连接,这是不可能的。如果要将服务器端套接字绑定到端口0,系统将自动分配1024以上的空闲端口。 因此,服务器套接字永远不会侦听端口0。 不幸的是我找不到关于此的文档。可能是其他操作系统的行为方式不同。
您的第二个问题:如果没有任何内容正在监听端口,那么您将获得连接异常。
答案 1 :(得分:0)
您是以root用户身份还是以管理员身份运行此程序?如果没有,只有这些用户可以打开一个端口在0到1024之间的套接字。