【问题标题】:Client and Server connection with different port numbers?使用不同端口号的客户端和服务器连接?
【发布时间】:2021-10-03 11:34:56
【问题描述】:

我在 python 中使用套接字设置了一个客户端和一个服务器,我的客户端将数据发送到服务器,服务器执行操作,然后将一些数据返回给客户端。最初,客户端和服务器都具有相同的端口号(9999)。我目前的问题是我必须将服务器的端口更改为19999,当我尝试运行时,它不起作用。如果客户端的端口也改为19999,客户端可以发送数据,但是如果客户端是9999,服务器是19999,它就不起作用,这是我需要的。网络系统的新手,因此希望能提供任何有用的信息或建议链接。

客户端(左)和服务器(右)的图片

【问题讨论】:

  • "最初客户端和服务器都具有相同的端口号 (9999)。" 您应该让客户端获得一个临时端口。尝试让两者使用相同的端口号是不必要且错误的。
  • @RonMaupin 要使用的端口是在我未选择的问题描述中指定的。 9999和19999端口可以建立连接吗?
  • "9999和19999端口可以建立连接吗?" 是的,当然可以。每一侧的端口号可以不同,而且几乎总是如此。当您使用众所周知的 HTML 端口号 443 连接到网站时,您会获得一个随机的、短暂的端口号。这听起来像是代码故意尝试做一些毫无意义和有害的事情。
  • @RonMaupin 这只是一个面试编码项目,看看我是否可以跳入新任务,因为我以前没有做过网络编程。你会说这个链接是错误的吗? (stackoverflow.com/questions/37694551/…)。这里的最高答复指出它们必须相同。作为参考,第一部分我被告知要让它们都在同一个端口上,然后告诉服务器现在应该在 19999 上运行。所以我假设我必须将客户端保持在 9999 上,因为没有指定
  • @RonMaupin 我附加了一个带有套接字代码的编辑,如果它提供了更多上下文

标签: sockets network-programming client-server port


【解决方案1】:

通常,客户端将使用ephemeral port 作为其本地端口,并连接到服务器端口。您的客户端代码正在尝试连接到端口 9999,这不是服务器端口,这解释了它为什么不工作。您需要连接到端口 19999,因为这是服务器正在侦听的端口。

使用未绑定的套接字会导致客户端在建立连接时为其本地地址选择一个临时端口。如果您希望客户端绑定到特定端口,请在调用 connect 之前使用 bind

# bind locally to 9999
local_addr = (host, 9999)
s.bind(local_addr)

# connect to 19999
remote_addr = (host, 19999)
s.connect(remote_addr)

【讨论】:

  • 感谢您的回复,但这不一定是我想要做的。如果我进行此更改,我将无法在服务器上本地运行多个客户端,因为连接都试图使用相同的端口。
  • @RonMaupin 刚刚阅读了第一个规范,它从未指定我的客户必须使用的端口,所以我只是将其更改为 9999。谢谢你们的帮助
  • @wetmoney 为了清楚起见,您说 但是如果客户端是 9999 而服务器是 19999,它就不起作用,这是我需要的。我的回答解释了为什么您尝试的方法不起作用,以及如何更改它以使其起作用,因为您已经声明它是必需的。限制正是您所说的,这就是客户端通常使用临时端口的原因。
猜你喜欢
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 2016-07-06
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多