Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 套接字编程-从打开的端口读取消息_Java_Sockets_Tcp - Fatal编程技术网

Java 套接字编程-从打开的端口读取消息

Java 套接字编程-从打开的端口读取消息,java,sockets,tcp,Java,Sockets,Tcp,我正在尝试从系统上所有打开的端口读取消息。但我没有得到任何输出。代码如下: public class ReadPort { public static void main(String[] args) { for(int port = 0; port <= 65535; ++port) { try { Socket socket = new Socket(); socket.co

我正在尝试从系统上所有打开的端口读取消息。但我没有得到任何输出。代码如下:

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) {
        }
    }
}

您试图将所有端口从
0连接到65535
,但这并不意味着您可以连接所有端口。并非所有端口都在侦听连接,因为侦听连接必须需要TCP或UDP服务器

您可以找到有关端口以及在一般情况下使用哪个端口的服务器的信息。因此,基本上在您的机器中,可用端口可能是
10到100
(可能是或不是)


因此,现在您可以连接那些
10到100
socket服务器。但在连接之后,不确定服务器或另一方是否会发送内容。在大多数情况下,通信是基于请求(客户端)和响应(服务器)进行的。这里您是一个客户,这就是为什么您什么也得不到。

您对套接字的工作原理有一些严重的误解

  • 系统上的大多数端口将拒绝连接请求。只有绑定到正在运行的服务器进程的端口才会接受连接
  • 成功建立连接后,通常会发送数据以从服务器发出请求,即HTTP
    GET
    请求。许多服务器会等到您发送某个内容后才响应。正如您已经看到的,尝试从连接的套接字读取而不首先发送任何内容将超时,尽管某些服务器(如SMTP)发送您可以读取的横幅消息
  • 如果您想做一些有意义的事情,您必须知道您连接到哪个服务器进程,以及它理解什么协议,以便知道发送什么。这就是为什么HTTP有80个,SSH有22个

  • 我强烈建议您通过

    连接到端口0。我为你准备好了这个烂摊子。
    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)