2013-07-02 40 views

回答

1

該應用程序必須是告訴。端口是在etc/services中列出的標準端口,在這種情況下,getaddrinfo() API會告訴您,否則它通過應用程序的配置提供,或者硬連接到源代碼中。

0

應用程序在創建與服務器的套接字連接時建立端口號。該套接字知道綁定到哪個本地IP /端口以及連接到哪個遠程IP /端口。只要使用該套接字發送數據,就會使用這些值。傳輸層知道將哪些值放入IP和TCP報頭中。

+0

這就是我的問題。套接字如何知道它綁定到哪個遠程端口? – Sankalp

+0

它是套接字的一個屬性。一旦套接字被本地綁定('bind()'或'accept()'),就可以在任何時候使用getsockname()來檢索本地IP /端口。連接建立後('connect()'或'accept()'),遠程IP /端口可以隨時用'getpeername()'檢索。只要將套接字看作包含各種行爲字段的結構,就可以通過各種套接字API函數訪問/分配這些行爲字段。該信息的實際存儲是操作系統的實現細節。 –

+0

再次,它將繼續挖掘。 socket API確實可以將目標端口號返回給應用程序,但API如何獲得它?是否像@EJP提到的那樣硬編碼? – Sankalp