繁体   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