【问题标题】:Why port number 9000 for server connection?为什么要使用端口号 9000 进行服务器连接?
【发布时间】:2021-12-23 21:20:28
【问题描述】:
@Test
public void givenGreetingClient_whenServerRespondsWhenStarted_thenCorrect() {
    GreetClient client = new GreetClient();
    client.startConnection("127.0.0.1", 9000);
    String response = client.sendMessage("hello server");
    assertEquals("hello client", response);
}

我在关注baeldung上的sockets tutorial,无法理解作者是如何确定端口号9000来连接服务器的。 127.0.0.1 代表 localhost IP 地址,所以我假设它与 IntelliJ 运行时有关,但是如何知道 IntelliJ 运行的端口?我尝试了其他端口号,没有一个通过测试。

【问题讨论】:

  • 因为在另一个 sn-p 中,服务器恰好在该端口上启动。 server.start(6666);。并且 6666 并不特殊,可以是 1234,只要它在所有地方都一致更改并且尚未被其他应用程序使用。
  • 好吧,他不得不选择一些数字,然后决定选择 6666。实际上并没有更多的东西。 - “那么如何知道 IntelliJ 运行的端口” server.start(6666);
  • @OHGODSPIDERS 如果那个端口被占用了怎么办?我可以随机分配任何大于 1024 的数字吗?
  • 是的,你可以。但是你需要小心一点,因为许多 > 1024 的端口都有指定的含义;见en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

标签: java sockets networking ip


【解决方案1】:

端口号区分在同一台计算机上运行的不同服务器程序。您可以使用任何有效的端口号(1 到 65535,最好使用 1024 到 49151 之间的一个),但它必须与服务器使用的端口号相同。如果有服务器程序在端口 12345 上侦听并且您连接到端口 54321,您将不会连接到服务器程序。您将连接到另一个正在在该服务器上侦听端口 54321 的服务器程序,或者如果没有,则会收到错误。

您会注意到,在教程中,服务器也使用了 6666。

流行和标准协议,如 HTTP,都有官方端口号(HTTP 是端口 80)。除此之外,通常只选择一个您可以轻松记住的端口号,或者只是掷骰子,希望它还没有被使用。

只有在同一台计算机上的两个服务器程序尝试使用相同的端口号时才会出现问题。如果 Windows 更新使用端口 12345,而我的游戏也使用端口 12345,那没关系,因为它们连接到不同的服务器。即使有人在玩我的游戏时下载了更新,那也没关系,因为他们的计算机只运行这两者的客户端程序。如果 Microsoft 希望他们的 Windows 更新服务器也成为我的游戏的服务器,那是唯一会产生问题的时候。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-02
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2021-02-28
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多