[英]Different ways of opening and binding a UDP socket with Boost Asio c++
我正在嘗試使用 Boost Asio 庫在 C++ 中創建一個簡單的 UDP 廣播類。 具體來說,在主類中,我想實例化一個套接字來發送和接收數據。 但是我已經看到了三種不同的方法,我想問是否有人知道其中的區別? 這些是我見過的方法:
第一個使用 io_context 創建套接字后,打開它:
socket.open(udp::v4());
我在某處讀到它在發送數據包后也可以接收,因為調用socket.send(...)
會自動將套接字綁定到本地端點(即主機地址和隨機端口); 但是此時任何想要向該特定套接字發送數據包的人,如果本地端點是一種“生成的隨機”(端口未知..),將如何做到這一點。
我見過的第二種方法是首先打開套接字,然后將其綁定到本地端點:
socket.open(udp::v4());
socket.bind(local_endpoint);
最后第三種方法,包括創建具有本地端點的套接字,並在不調用 open() 的情況下使用它:
udp::socket socket(io_context, local_endpoint);
那么這三者之間有什么區別,它們都會起作用嗎? 最好的方法是什么?
先感謝您!
第一種方法將創建一個不綁定到特定端口的套接字。 如果您不關心有人向您發送消息,這很好。 IE:您向recipent發送消息,他們可以回復,因為他們收到了發件人的IP和Port以及消息。
如果您希望某人能夠在特定 IP 和端口上向您發送消息,您可以像這樣初始化您的套接字:
socket_(io_service, udp::endpoint(udp::v4(), port))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.