簡體   English   中英

使用 Boost Asio c++ 打開和綁定 UDP 套接字的不同方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM