0
点赞
收藏
分享

微信扫一扫

泛微E9开发 限制整型、日期型、附件型字段的取值范围

年迈的代码机器 2024-05-07 阅读 14
c++HP-Socket

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 条评论