[英]Get random port for UDP socket
我需要創建一個程序,該程序將通過 UDP 套接字與同一台計算機上的其他程序進行通信。 它將從stdin
讀取命令,其中一些命令將使其發送/接收數據包而不會停止執行。 我已經閱讀了一些信息,但由於我不熟悉套接字編程並且需要快速完成,所以我有以下問題:
此外,歡迎提供此類套接字設置的代碼示例,以及發送/接收字符串的示例。
調用bind()
指定端口 0。這將允許操作系統選擇一個未使用的端口。 然后,您可以使用getsockname()
檢索所選端口。
如果您需要臨時端口,Remy Lebeau 的回答很好。 如果您需要一個持久保留的端口,那就不太好,因為其他軟件也使用相同的方法來獲取一個端口(包括每個連接都需要一個新的臨時端口的 OS TCP 堆棧)。
所以可能會發生以下情況:
然后你需要重啟軟件:
因此,對於“未來用途”,您需要一個不在臨時端口范圍內的端口(即 bind(host, 0) 返回端口的范圍)。
我對這個問題的解決方案是port-for命令行實用程序。
如果它是一個隨機端口實際上很重要,您應該執行以下操作:
srand(time(NULL));
rand() % NUM_PORTS; // NUM_PORTS isn't a system #define
然后在綁定中指定該端口。 如果失敗,請選擇一個新的(無需重新播種隨機生成器。如果隨機端口不重要,請查看 Remy Lebeau 的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.