【问题标题】:before calling connect(), can I know which port number I'll use?在调用 connect() 之前,我能知道我将使用哪个端口号吗?
【发布时间】:2012-01-04 06:38:07
【问题描述】:

我正在使用 socking 编程 API 编写客户端/服务器应用程序。

在客户端,在调用 connect() 之前,我可以知道我将使用哪个端口号吗? 我现在拥有的是来自调用 socket() 的套接字文件描述符。我尝试使用getsockname,但端口号只有0。

【问题讨论】:

  • 您的意思是要连接到哪个套接字,还是要在哪个套接字上写入?

标签: c sockets tcp


【解决方案1】:

在您调用 bind(2)(端口=0 和/或 addr=0)之前,没有分配地址/端口。绑定后就可以使用getsockname了。

【讨论】:

  • 当然,connect 暗示 bind 如果之前没有被显式调用。
【解决方案2】:

如果您完全不熟悉套接字编程,我强烈建议您阅读Beej's Guide to Network Programming

但要使用 TCP 套接字回答您的问题(我认为),您需要知道您正在连接的远程端口(即服务器也执行 bind())。但是,您通常(客户端应用程序程序员)不指定服务器用于回复的端口。它是由 TCP 堆栈根据客户端可用的端口号随机选择的。

【讨论】:

  • 客户端随机选择的端口通常称为“临时端口”。
  • @VictorT。你会说现在更准确吗?
  • 有问题。当我使用 bind() 时,我可以正确获取端口号。但是,我无法获得正确的 IP 地址。
【解决方案3】:

您可以显式调用bind(),即使使用端口号0。之后,getsockname() 应该会给你端口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2022-11-27
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多