前言
基于pfunix的UDP通信在linux作为在系统内部进程之间的一种通信方式非常常见,效果也很好。
本文介绍了一个对UDP的系统调用进行了封装的类(CPfUdp),可以简化UDP的访问,提升开发效率。
github: https://github.com/magiclake/hnet
一、CPfUdp 是什么?
PF_UNIX (也称作 PF_LOCAL ) 套接字族用来在同一机器上的提供有效的进程间通讯.Unix 套接字可以是匿名的(由 socketpair(2) 创建), 也可以与套接字类型文件相关联. Linux 还支持一种抽象名字空间, 它是独立于文件系统的.
有效的类型有: SOCK_STREAM 用于面向流的套接字, SOCK_DGRAM 用于面向数据报的套接字,其可以保存消息界限. Unix 套接字总是可靠的,而且不会重组数据报.
Unix 套接字支持把文件描述符或者进程的信用证明作为数据报的辅助数据传递给其它进程.
CPfUdp 是一个使得在Linux下使用PF_UNIX 进行udp通信的单头文件的封装类。
二、UDP客户端使用
#include "CPfUdp.hpp"
void main(){
using namespace hnet;
CUdpPfClient client(PF_PATH);
UdpData data(sendData, sendData + strlen(sendData));
if (!client.send(data))
{
printf("CUdpPfClient:send data fail\n");
}
else
{
printf("CUdpPfClient:send data %s OK\n", &data[0]);
}
UdpData outData;
if (!client.recv(outData))
{
printf("CUdpPfClient:recv data fail\n");
}
else
{
printf("CUdpPfClient:recv data %s OK\n", &outData[0]);
}
}
三、UDP服务端使用步骤
1.引入库
#include "CPfUdp.hpp"
2. 创建服务监听类
class testServerEvent : public hnet::UdpServerEvent
{
public:
virtual bool dataRxEvent(UdpData &data)
{
printf("testServerEvent:recv data:[%s],now echo\n", &data[0]);
// use this funciont to send data back if u need
return response(data);
}
};
2. 添加到服务器中并运行服务
using namespace hnet;
try
{
testServerEvent eventHandler;
CUdpPFUnixServer server(PF_PATH, &eventHandler);
printf("server start\n");
server.run_forever();
}
catch (const hnet::network_error &err)
{
printf("CUdpPfClient error:%s\n", err.what());
}
总结
以上就是今天分享的一个简单的基于C++的UDP封装类,可以简化linux系统上对UDP系统调用的访问。
版权声明:本文为weixin_43132521原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。