首页 > 解决方案 > 为什么要使用端口号 9000 进行服务器连接?

问题描述

@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 上的套接字教程 ,无法理解作者如何确定9000连接到服务器的端口号。127.0.0.1代表 localhost IP 地址,所以我假设它与 IntelliJ 运行时有关,但是如何知道 IntelliJ 正在运行的端口?我尝试了其他端口号,但没有一个通过测试。

标签: javasocketsnetworkingip

解决方案


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

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

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

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


推荐阅读