似乎boost::asio为每个协议定义了一个单独的端点类,如果你想在一个特定的端点上同时执行UDP和TCP操作(必须从一个转换到另一个),这是很麻烦的。我一直认为端点只是一个IP地址(v4或v6)和端口号,而不考虑TCP或UDP。
是否存在显著的差异来证明不同的类是合理的?(例如,tcp::socket和udp::socket都不能接受像ip::endpoint这样的东西吗?)
发布于 2010-07-24 01:55:16
套接字的创建方式不同
socket(PF_INET, SOCK_STREAM)对于TCP,和
socket(PF_INET, SOCK_DGRAM)用于UDP。
我怀疑这就是Boost.Asio中不同类型的原因。查看man 7 udp或man 7 tcp了解更多信息,我假设是Linux,因为您没有标记您的问题。
要解决您的问题,请从TCP端点提取IP和端口,并实例化UDP端点。
#include <boost/asio.hpp>
#include <iostream>
int
main()
{
using namespace boost::asio;
ip::tcp::endpoint tcp(
ip::address::from_string("127.0.0.1"),
123
);
ip::udp::endpoint udp(
tcp.address(),
tcp.port()
);
std::cout << "tcp: " << tcp << std::endl;
std::cout << "udp: " << udp << std::endl;
return 0;
}示例调用:
./a.out
tcp: 127.0.0.1:123
udp: 127.0.0.1:123发布于 2011-11-17 14:00:16
TCP和UDP端口不同。例如,只要一个使用TCP,另一个使用UDP,两个单独的程序就可以同时侦听单个端口。这就是端点类不同的原因。
https://stackoverflow.com/questions/3320605
复制相似问题