首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Boost::Asio中的tcp::endpoint和udp::endpoint有什么区别?

Boost::Asio中的tcp::endpoint和udp::endpoint有什么区别?
EN

Stack Overflow用户
提问于 2010-07-24 01:07:27
回答 2查看 11.7K关注 0票数 8

似乎boost::asio为每个协议定义了一个单独的端点类,如果你想在一个特定的端点上同时执行UDP和TCP操作(必须从一个转换到另一个),这是很麻烦的。我一直认为端点只是一个IP地址(v4或v6)和端口号,而不考虑TCP或UDP。

是否存在显著的差异来证明不同的类是合理的?(例如,tcp::socketudp::socket都不能接受像ip::endpoint这样的东西吗?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-24 01:55:16

套接字的创建方式不同

代码语言:javascript
复制
socket(PF_INET, SOCK_STREAM)

对于TCP,和

代码语言:javascript
复制
socket(PF_INET, SOCK_DGRAM)

用于UDP。

我怀疑这就是Boost.Asio中不同类型的原因。查看man 7 udpman 7 tcp了解更多信息,我假设是Linux,因为您没有标记您的问题。

要解决您的问题,请从TCP端点提取IP和端口,并实例化UDP端点。

代码语言:javascript
复制
#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;
}

示例调用:

代码语言:javascript
复制
./a.out 
tcp: 127.0.0.1:123
udp: 127.0.0.1:123
票数 4
EN

Stack Overflow用户

发布于 2011-11-17 14:00:16

TCP和UDP端口不同。例如,只要一个使用TCP,另一个使用UDP,两个单独的程序就可以同时侦听单个端口。这就是端点类不同的原因。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3320605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档