【问题标题】:I can't find my port number at my IP address我在我的 IP 地址中找不到我的端口号
【发布时间】:2017-12-16 16:22:28
【问题描述】:

我正在尝试使用 Socket 创建聊天。为此,我需要使用一个名为 SocketJAVA 中的类。在我的例子中,它有两个参数Socket(InetAddress address, int port)
通过 CMD 中的命令,我知道我的 IP 是什么:ipconfig

但我不知道该在我的端口号中输入什么,因为我知道在哪里可以找到它。
是否有任何命令、应用程序或其他东西可以获取端口号
我使用textpad 8 创建JAVA 程序

有两个程序,发送器接收器

发射器代码

import java.net.*;
import java.io.*;
public class Program
{

    public static void main(String[] args)
    {
        try
        {

            ServerSocket request = new ServerSocket(12345);
            Socket connection = request.accept();
            PrintWriter transmitter = new PrintWriter(connection.getOutputStream());
            BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));

                String line = null;

                do
                {

                    line = keyboard.readLine();
                    transmitter.println(line);
                    transmitter.flush();

                }
                while (line==null || !line.toUpperCase().equals("END"));

                    transmitter.close();
                    connection.close();
                    request.close();

        }

        catch(Exception error)
        {
            System.out.println("Communication error");
        }

    }
}



接收方代码

import java.net.*;
import java.io.*;

public class Programa
{

public static void main(String[] args) {

            try
            {
            Socket connection = new Socket("123.456.78.9",12345);
            BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
            BufferedReader receptor = new BufferedReader(new InputStreamReader(conexao.getInputStream()));

                String line = null;
                do
                {

                        line=receptor.readLine();
                        System.out.println(line);

                }
                while(line==null || !line.toUpperCase().equals("END"));
                receptor.close();
                connection.close();
            }

            catch(Exception error)
            {
                System.out.println("Communication error");
                System.out.println("Error: " + error);
            }
        }
 }

【问题讨论】:

  • PC 没有端口号,应用程序侦听端口号。你可以选择一个。
  • 我需要做什么才能获得这个数量的端口?
  • @Grandtour 端口号由您选择。无论如何,您不应该使用standard port 或另一个进程为already using 的端口。您的客户必须知道地址和端口
  • 哇,我不知道,谢谢。但我已经有一个错误:java.net.ConnectException:连接被拒绝:连接
  • 是否有任何服务正在监听您尝试连接的 IP/端口?

标签: java sockets network-programming serversocket


【解决方案1】:

此构造函数中的“端口”参数是您要运行服务的端口。它与系统无关。您可以将其作为您希望运行此服务的任何端口号传递。

【讨论】:

  • 你确定这是端口号吗?
  • 您可以使用任何端口号作为要运行聊天服务的参数。您的服务将可以通过您传递的端口号访问。
  • 但是当我输入任何端口号时,它会显示错误:java.net.ConnectException: Connection denied: connect
  • 首先在该端口上启动服务器。然后使用客户端访问该端口上的服务。出现错误是因为您尝试访问的端口上没有运行任何服务。这是一个示例服务器代码,可帮助您入门。使用 ServerSocket 在端口上启动服务。链接参考:javatpoint.com/socket-programming
  • 我不知道如何在该端口上启动服务器。 '-'
【解决方案2】:

地址将您带到机器。机器接收到这个请求,并根据添加的端口号将网络流量定向到正在运行的程序。

如果您不知道应该由哪个程序接收您的请求,则需要找出答案。然后您需要找出该程序正在侦听的端口号。 “监听”这个短语的真正含义是“操作系统将使用哪个端口号作为需要发送到程序的流量”。

如果您同时编写客户端和服务器,那么您将在服务器中创建的ServerSocket 的参数将是“接受请求”的端口号。对于服务器,这实际上是对操作系统的请求,要求将带有此端口号标记的流量重定向为输入,以便在ServerSocket 上读取。

如果您不知道服务器程序正在处理哪些端口,并且您已登录到该服务器,并且该服务器是 Linux 服务器,则可以运行该命令

lsof -iTCP -sTCP:LISTEN

这将列出服务器之类的程序正在侦听的所有端口。

如果您不在该计算机上,您可以使用nmap 之类的工具,但我建议您不要在未经事先许可的情况下在其他人的网络上使用它。许多人使用nmap 来发现攻击服务器的可能路线,因此您的意图中的错误传达可能导致他们认为您是恶意攻击者。

【讨论】:

  • 因为它告诉我 'lsof' 不是内部或外部命令、操作程序或批处理文件。
  • @Grandtour 对不起,我忘了说该命令是针对 Linux 服务器的。好久没用微软的操作系统了,不知道怎么在这样的机器上做。
【解决方案3】:

8100 端口是一个相当安全的选择。也就是说,端口是小于 65536 的整数,应用程序可以在一个或多个 IP 地址上侦听和响应。侦听特定 TCP 端口的应用程序应该是侦听该端口的唯一应用程序。一些端口分配是“众所周知的”,您可以通过查找它们来避免潜在的冲突,即使您当时碰巧没有运行这些应用程序之一。 (例如,请参阅https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers)。

如果您将来可能想与使用 Linux 的朋友共享您的 Java 应用程序,则应避免使用 1024 以下的端口,否则他们需要配置特殊权限。

因此,避免冲突的方法是首先避免常用端口和端口以及低编号端口,然后从剩余的可用端口中挑选并验证您的系统是否尚未使用它。您可以在 Windows 上使用 netstat 命令执行此操作,如下所示:

netstat -a -b | findstr 8100

如果您看到带有“LISTENING”一词的输出,则选择另一个,可能是 8101、8102 等。如果在 10 秒后没有显示任何结果,那么您选择了获胜者。您也可以省略| findstr xxxx 部分并查看结果。它是按端口号排序的,因此您可以在其他两个可接受的 TCP 端口号之间选择一个端口。

【讨论】:

    猜你喜欢
    • 2011-11-28
    • 2020-08-04
    • 2021-01-03
    • 2016-01-04
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多