【问题标题】:Can two connected sockets listen on different ports?两个连接的套接字可以监听不同的端口吗?
【发布时间】:2017-06-09 21:37:42
【问题描述】:

假设客户端有一个正在侦听端口 80 的套接字。这个套接字可以与侦听其他不同端口的服务器套接字连接吗?还是服务器也必须监听 80 端口?

我指的是 AF_INET 类型的网络套接字。

【问题讨论】:

  • 不清楚你想要完成什么。也许您应该先阅读一篇关于套接字的介绍性文章?

标签: c sockets unix


【解决方案1】:

没有要求 TCP 连接两端的端口号必须相同。事实上,他们很少这样做。

服务器套接字(正在监听的)需要绑定到一个已知的端口号(例如 HTTP 的 80),这样客户端才能知道连接到哪里。当客户端套接字与服务器建立连接时,它通常会随机选择一个可用的本地端口号。客户端确实可以选择在连接之前绑定到特定端口,但这不是必需的。

一个 TCP 套接字由 4 个值定义:本地 IP、本地端口、远程 IP、远程端口。因此,您可以有多个客户端套接字(都具有相同的本地 IP,但端口不同),每个套接字都连接到给定的远程 IP 和端口。

【讨论】:

  • 谢谢!这回答了我的问题!还有一个小问题,客户端随机选择一个端口后,操作系统会告诉服务器选择了哪个端口,对吗?再次感谢您的回答!
  • @DanielOliveira 是的,当服务器接受新连接时,客户端的 IP 和端口将在参数中返回给 accept 函数。
猜你喜欢
  • 2016-05-25
  • 2016-11-24
  • 2012-06-23
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多