我正在尝试从我系统上的所有开放端口读取消息。但我没有得到任何输出。以下是代码:
public class ReadPort {
public static void main(String[] args) {
for(int port = 0; port <= 65535; ++port) {
try {
Socket socket = new Socket();
socket.connect(new InetSocketAddress("127.0.0.1", port), 1);
BufferedReader reader = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String text = reader.readLine();
System.out.println("Message from Port #" + port + " : " + text);
socket.close();
} catch(IOException ioe) {
}
}
}
例外:
java.net.SocketTimeoutException
at java.net.SocksSocketImpl.remainingMillis(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at ReadPort.main(ReadPort.java:6)
答案 0 :(得分:0)
您尝试连接0 to 65535
的所有端口,这并不意味着您可以连接所有端口。并非所有端口都是侦听连接,用于连接侦听必须需要TCP或UDP服务器。
您可以在一般情况https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers中找到有关端口和使用哪个端口的服务器的信息。所以基本上在你的机器上可用端口可能是10 to 100
(可能与否)。
现在您可以连接那些10 to 100
套接字服务器。但在连接后,它不确定服务器或其他方是否会发送内容。在大多数情况下,通信基于request(client) and response(server)
进行。在这里,你是一个客户,这就是为什么你没有得到任何东西。
答案 1 :(得分:0)
你对套接字如何工作有一些严重的误解。
GET
请求。许多服务器等到您在响应之前发送内容。正如您已经看到的那样,尝试从连接的套接字读取而不先发送任何内容只会超时,尽管某些服务器(如SMTP)会发送您可以读取的横幅消息。我强烈建议您浏览Java Tutorial on Networking