,我可以知道我将使用哪个端口号吗?

问题描述:

我正在使用socking编程API编写客户端/服务器应用程序。,我可以知道我将使用哪个端口号吗?

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

+0

你是指你连接的是哪个插座,或者你将要写出哪个插座? – dbeer 2012-01-03 22:22:13

即使端口号为0,您也可以明确调用bind()。之后,getsockname()应该给你的端口。

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

+0

当然,'connect'暗示'bind',如果它之前没有明确调用的话。 – 2012-01-04 00:26:33

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

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

+0

那些在客户端随机选择的端口通常被称为“短暂端口”。 – greatwolf 2012-01-03 22:35:00

+0

@VictorT。你会说现在这更准确吗? – 2012-01-03 22:41:23

+0

存在问题。当我使用bind()时,我可以正确地获得端口号。但是,我无法获得正确的IP地址。 – flyingbin 2012-01-04 14:48:42