在调用connect()之前,我可以知道我将使用哪个端口号吗?

时间:2012-01-03 22:18:28

标签: c sockets tcp

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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

即使端口号为bind(),您也可以明确呼叫0。在此之后,getsockname()应该为您提供端口。