使用Boost Asio c++打开和绑定UDP套接字的不同方式



我正在尝试使用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:你向接收者发送消息,他们可以回复,因为他们收到了发送者的IP和端口以及消息。

如果你想让别人在特定的IP和端口上给你发消息,你可以这样初始化你的套接字:

socket_(io_service, udp::endpoint(udp::v4(), port))

最新更新