当前位置: 代码网 > it编程>编程语言>C/C++ > 【C++】HP-Socket(三):UdpClient、UdpServer、UdpCast、UdpNode的区别

【C++】HP-Socket(三):UdpClient、UdpServer、UdpCast、UdpNode的区别

2024年08月03日 C/C++ 我要评论
UDP是无连接的,在UDP传输层中并没有客户端和服务端的概念。但是可以在应用层定义客户端和服务端,可以灵活的互换客户端和服务端,或者同时既是客户端也是服务端。HP-Socket中在应用层定义了四种UDP组件:UdpClient、UdpServer、UdpCast、UdpNode。

1、简述

udp是无连接的,在udp传输层中并没有客户端和服务端的概念。但是可以在应用层定义客户端和服务端,可以灵活的互换客户端和服务端,或者同时既是客户端也是服务端。

hp-socket中在应用层定义了四种udp组件:udpclient、udpserver、udpcast、udpnode

2、区别

1)udpclient
udpclient 是客户端的udp,向服务器发送 udp 数据包后等待接收响应。

2)udpserver
udpserver 是服务端的udp,用于监听端口,接收来自多个客户端的 udp 数据包,并可以向这些客户端发送响应。

3)udpcast
udpcast 是专用于 udp 广播或组播的组件,和 udpclient 类似继承自 iclient,本质也属于客户端。

4)udpnode
udpnode 是通用的 udp 通信节点,没有客户端和服务端的概念,也可以认为既是客户端也是服务端
还可以实现广播和组播功能。

3、用法

3.1 udpclient

基本用法

  • 创建 udpclient 实例。
  • 调用 start 方法启动客户端,并指定本地监听的 ip 和端口。
  • 使用 send 方法向服务器发送数据。
  • 接收来自服务器的数据。
  • 调用 stop 方法停止客户端。
#include "hpsocket.h"
#include "socketinterface.h"

int main() {
    iudpclient* pclient = createudpclient();
    if (pclient->start("0.0.0.0", 0)) {
        const char* serveraddress = "127.0.0.1";
        ushort serverport = 5555;
        const char* message = "hello, server!";
        pclient->send(serveraddress, serverport, (const byte*)message, strlen(message));
    }

    pclient->stop();
    destroyudpclient(pclient);
    return 0;
}

3.2 udpserver

基本用法

  • 创建 udpserver 实例。
  • 实现一个监听器类,继承自 iudpserverlistener,并实现其方法,如 onpreparelisten、onreceive 等。
  • 设置服务器的监听器。
  • 调用 start 方法启动服务器,并指定监听的 ip 和端口。
  • 处理接收到的数据。
  • 调用 stop 方法停止服务器
#include "hpsocket.h"
#include "socketinterface.h"

class clistener : public cudpserverlistener {
public:
    virtual enhandleresult onreceive(iudpserver* psender, connid dwconnid, const byte* pdata, int ilength) {
        printf("received: %s\n", pdata);
        return hr_ok;
    }
};

int main() {
    iudpserver* pserver = createudpserver();
    clistener listener;
    pserver->setlistener(&listener);

    if (pserver->start("0.0.0.0", 5555)) {
        printf("server started.\n");
        getchar();  // 等待输入,退出服务
    }

    pserver->stop();
    destroyudpserver(pserver);
    return 0;
}

4、组播ttl和回环

1)ttl(time to live)即“生存时间”,用于指定数据包在网络中可以经过的最大路由器(跳数)数量。

  • ttl = 0:数据包只能在本地机器上循环,不会被发送到任何网络。
  • ttl = 1:数据包只能在同一子网内传输,不能跨越路由器。
  • 较高的ttl值:如果ttl值更高,数据包可以跨越多个路由器,从而到达更远的网络。

2)loop(环回)

  • 启用:发送的数据包可以被同一主机上的组播组成员接收。
  • 禁用:发送的数据包不会被发送者所在的主机接收。
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com