java - 为什么要使用端口号 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 正在运行的端口?我尝试了其他端口号,但没有一个通过测试。
解决方案
端口号区分在同一台计算机上运行的不同服务器程序。您可以使用任何有效的端口号(1 到 65535,最好使用 1024 到 49151 之间的一个),但它必须与服务器使用的端口号相同。如果有服务器程序在端口 12345 上侦听并且您连接到端口 54321,您将不会连接到服务器程序。您将连接到另一个正在侦听该服务器上端口 54321 的服务器程序,或者如果没有,则会收到错误消息。
您会注意到,在教程中,服务器也使用 6666。
流行的标准协议,如 HTTP,有官方的端口号(HTTP 是端口 80)。除此之外,通常只选择一个您可以轻松记住的端口号,或者只是掷骰子,并希望它还没有被使用。
如果同一台计算机上的两个服务器程序尝试使用相同的端口号,这只是一个问题。如果 Windows 更新使用端口 12345,而我的游戏也使用端口 12345,那没关系,因为它们连接到不同的服务器。即使有人在玩我的游戏时下载了更新,那也没关系,因为他们的计算机只运行这两者的客户端程序。如果微软希望他们的 Windows 更新服务器也成为我的游戏的服务器,那是唯一会产生问题的时候。
推荐阅读
- python - setuptools中有卸载命令吗?
- php - Laravel FFMpeg - 无法在文件错误中加载 FFMpeg
- node.js - 如何在firebase firestore中存储列表?
- python - 如何为初学者在神经网络中使用 RandomSearchCV 或 GridSearchCV 优化超参数?
- arrays - 在函数 (C) 中用作数组的指针
- javascript - 如何从javascript对象键在网页上显示图像
- angular - 如何在角度 6 中使用 *ngFor 绑定对象数组
- scip - 为什么 scip 在调用 SCIPincludeBranchRrule 后做出额外的分支决定?
- html - 使用 CSS 在 HTML 表格中堆叠元素
- python - 我在使用 numpy 和 openCV 时遇到问题