[英]Correct command to send in a datagram in the internet domain for port 0
我將按照“ 4.4BSD進程間通信入門”教程中給出的示例進行說明,該過程顯示了如何使用Internet域中的數據報進行通信。 在示例6a和6b中,6a設置端口和主機名
name.sin_addr.s_addr = INADDR_ANY;
name.sin_port = 0;
據我了解, INADDR_ANY
是一個通配符值,允許套接字從任何地方接收。 但是,我無法從任何地方發送並在6b中顯式設置主機名
hp = gethostbyname(argv[1]);
那么什么主機名在這里有效? 當我嘗試過
program6b localhost 0
但這表示無法分配請求的地址(我使用了其他地址和同一條消息)。 6a說“套接字的端口號為0”,盡管這意味着它在所有端口上偵聽,對嗎? 無論如何,我都嘗試手動設置該帖子,以便“套接字具有端口#53790”。 Netstat顯示它正在監聽
udp4 0 0 * .53790 。
並使用命令
program6b localhost 53790
我得到的響應是已從讀取的套接字接收到數據。 因此,我部分理解了所發生的情況,但是我想知道該示例應如何在端口#0上工作。
端口0,不能同時使用UDP和TCP。 它們在套接字API bind
中指示,以請求操作系統將任意空閑端口分配給應用程序。 通常是通過客戶端代碼完成的,不需要關心所使用的特定端口。 另一方面,服務器代碼通常指定一個已知端口。
關於INADDR_ANY
,在進行本地bind
時表示:
相反,如果您指定一個地址,則該地址應該是您計算機的地址,並且是指擁有該地址的網絡接口。 然后:
注意:除非使用某種原始套接字,否則您無法同時收聽每個端口。 但不適用於UDP或TCP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.