【发布时间】:2012-01-04 06:38:07
【问题描述】:
我正在使用 socking 编程 API 编写客户端/服务器应用程序。
在客户端,在调用 connect() 之前,我可以知道我将使用哪个端口号吗? 我现在拥有的是来自调用 socket() 的套接字文件描述符。我尝试使用getsockname,但端口号只有0。
【问题讨论】:
-
您的意思是要连接到哪个套接字,还是要在哪个套接字上写入?
我正在使用 socking 编程 API 编写客户端/服务器应用程序。
在客户端,在调用 connect() 之前,我可以知道我将使用哪个端口号吗? 我现在拥有的是来自调用 socket() 的套接字文件描述符。我尝试使用getsockname,但端口号只有0。
【问题讨论】:
在您调用 bind(2)(端口=0 和/或 addr=0)之前,没有分配地址/端口。绑定后就可以使用getsockname了。
【讨论】:
connect 暗示 bind 如果之前没有被显式调用。
如果您完全不熟悉套接字编程,我强烈建议您阅读Beej's Guide to Network Programming。
但要使用 TCP 套接字回答您的问题(我认为),您需要知道您正在连接的远程端口(即服务器也执行 bind())。但是,您通常(客户端应用程序程序员)不指定服务器用于回复的端口。它是由 TCP 堆栈根据客户端可用的端口号随机选择的。
【讨论】:
您可以显式调用bind(),即使使用端口号0。之后,getsockname() 应该会给你端口。
【讨论】: