C++ UDP C/S 简单封装

news/2024/5/18 14:00:51 标签: C++, Programming, udp, cs

Server端类定义:

#include<Winsock2.h>

#pragmacomment(lib, "ws2_32.lib")

 

class UDPServer{

private:

    WSADATA wsaData;

    SOCKET serverSocket;

    sockaddr_in serverSockAddr;

public:

    UDPServer();

    void setSockAddr(const char *destAddr,const int destPort);

    void listen(const int port);

    void receive() const;

    ~UDPServer();

};

 

Server端实现:

#include"UDPServer.h"

#include<iostream>

 

using namespacestd;

 

UDPServer::UDPServer()

{

    WSAStartup(MAKEWORD(2, 2), &wsaData);

    serverSocket = socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP);

    cout << "Server Socketinitialized" << endl;

}

 

voidUDPServer::listen(const int port)

{

    serverSockAddr.sin_family=AF_INET;

    serverSockAddr.sin_port=htons(port);

   serverSockAddr.sin_addr.s_addr=htonl(INADDR_ANY);

    bind(serverSocket, (SOCKADDR*)&serverSockAddr, sizeof(serverSockAddr));

}

 

voidUDPServer::receive() const

{

    char buf[1024];

    int serverSockAddrSize =sizeof(serverSockAddr);

    recvfrom(serverSocket, buf, sizeof(buf), 0,(SOCKADDR *)&serverSockAddr, &serverSockAddrSize);

    cout << buf << endl;

}

 

UDPServer::~UDPServer()

{

    closesocket(serverSocket);

    WSACleanup();

    cout << "Server Socketreleased" << endl;

}

 

Client端类定义:

#include<Winsock2.h>

#pragmacomment(lib, "ws2_32.lib")

 

class UDPClient{

private:

    WSADATA wsaData;

    SOCKET clientSocket;

    sockaddr_in clientSockAddr;

public:

    UDPClient();

    void setSockAddr(const char *destAddr,const int destPort);

    void sendData(const char *buf, const intlen) const;

    ~UDPClient();

};

 

Client端实现:

#include"udpClient.h"

#include<iostream>

 

using namespacestd;

 

UDPClient::UDPClient()

{

    WSAStartup(MAKEWORD(2, 2), &wsaData);

    clientSocket = socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP);

    cout << "Client Socketinitialized" << endl;

}

 

UDPClient::~UDPClient()

{

    closesocket(clientSocket);

    WSACleanup();

    cout << "Client Socketreleased" << endl;

}

 

voidUDPClient::setSockAddr(const char *destAddr, const int destPort)

{

    clientSockAddr.sin_family = AF_INET;

    clientSockAddr.sin_port = htons(destPort);

    clientSockAddr.sin_addr.s_addr =inet_addr(destAddr);

}

 

voidUDPClient::sendData(const char *buf, const int len) const

{

    sendto(clientSocket, buf, len, 0, (SOCKADDR*)&clientSockAddr, sizeof(clientSockAddr));

}

 

Server端调用:

UDPServer* server =new UDPServer;

server->listen(4000);

for (int i = 0; i< 20; i++)

{

    server->receive();

}

delete server;

 

Client端调用:

const char*destAddr = "XXX.XXX.XXX.XXX";

const int destPort= 4000;

const charbuf[1024] = "This is a udp test message";

   

UDPClient* client =new UDPClient;

client->setSockAddr(destAddr,destPort);

for (int i = 0; i< 10; i++)

{

    client->sendData(buf, sizeof(buf));

}

 

delete client;



http://www.niftyadmin.cn/n/878145.html

相关文章

Go Lang开发环境搭建配置

&#xfeff;&#xfeff;这里介绍Windows环境的搭建步骤。 Go安装&#xff1a; 安装包下载地址&#xff08;需要翻墙&#xff09;&#xff1a;https://golang.org/dl 安装完成后&#xff0c;配置环境变量&#xff08;例如我们安装到D:\Go目录下&#xff09; GOPATH和GOROOT的配…

苏州中级职称 取消计算机,2019年中级报名,取消这一项流程!报名、考试……6个问题今天统一回复!...

原标题&#xff1a;2019年中级报名&#xff0c;取消这一项流程&#xff01;报名、考试……6个问题今天统一回复&#xff01;3月10日起各地陆续开始2019中级会计职称考试报名工作大变化&#xff01;中级全面取消了补报名目前&#xff0c;大部分地区已经公布报名简章&#xff0c;…

Go语言基础语法学习笔记[1]

行分隔符&#xff1a; Go语言中&#xff0c;一行代表一个语句结束&#xff0c;不需要以分号“;”结尾&#xff0c;如果需要在一行写多个语句&#xff0c;则每个语句需要使用分号进行区分&#xff0c;不鼓励这样做。 注释&#xff1a; // 单行注释 /* 多行注释 */ 标识符&#x…

Go语言基础语法学习笔记[2]

&#xfeff;&#xfeff;算术运算符&#xff1a; - * / % -- 注意&#xff1a; --这两个运算符不返回值&#xff0c;所以不能作为赋值或输出&#xff0c;例如下面的用法是非法的 var a int 3 fmt.Println(a) //syntax error: unexpected , expectingcomma or ) var b…

计算机地图概括的原理,地图概括

[拼音]&#xff1a;ditu gaikuo[外文]&#xff1a;cartographic generalization地图编制过程中取舍和简化地图内容的原理与方法。通过取舍和简化&#xff0c;表示制图区域或制图对象最主要的特征和分布规律。也称制图综合。概括的内容和方法(1)地图内容的取舍。包括根据编制地图…

Go语言基础语法学习笔记[3]

&#xfeff;&#xfeff;数组&#xff1a; 声明&#xff1a; var variable_name [SIZE]variable_type 注意&#xff1a;数组长度是固定不能改变的 一维数组举例&#xff1a; var arr1 [10]int arr1[0] 10 var arr2 [5]int{1,2,3,4,5} var arr3 [...]int{1,2,3,4,5,6} fmt.P…

Go语言goroutine+channel+select简介

&#xfeff;&#xfeff;goroutine&#xff1a; Go语言是原生支持语言级并发的&#xff0c;这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程&#xff0c;这种用户态线程是跑在内核级线程之上的&#xff0c;goroutine在运行时的调度是由Go语言提…

多媒体个人计算机系统包括,IT教程:多媒体计算机系统包括什么

科技就如同电灯发出的光一样&#xff0c;点亮我们的世界&#xff0c;点亮我们的生活&#xff0c;这一段时间以来多媒体计算机系统包括什么的消息络绎不绝是什么原因呢?接下来就让我们一起了解一下吧。大家好&#xff0c;我是智能客服时间君&#xff0c;上述问题将由我为大家进…