2012-01-03 83 views
1

我正在使用socking編程API編寫客戶端/服務器應用程序。,我可以知道我將使用哪個端口號嗎?

在客戶端,在調用connect()之前,我能知道我將使用哪個端口號嗎? 我現在擁有的是調用socket()的套接字文件描述符。我試圖使用getsockname,但我只有0端口號。

+0

你是指你連接的是哪個插座,或者你將要寫出哪個插座? – dbeer 2012-01-03 22:22:13

回答

0

即使端口號爲0,您也可以明確調用bind()。之後,getsockname()應該給你的端口。

2

在調用bind(2)(端口= 0和/或addr = 0)之前,沒有分配地址/端口。綁定後,您可以使用getsockname。

+0

當然,'connect'暗示'bind',如果它之前沒有明確調用的話。 – 2012-01-04 00:26:33

2

我強烈建議您閱讀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

相關問題