网站做适配手机要多久,wordpress-seo,怎么做网站后端,举例行业门户网站一、c
个人测试记录#xff0c;有问题还请指出#xff0c;谢谢
参考#xff1a;C开发基础之网络编程WinSock库使用详解TCP/UDP Socket开发_c udp使用什么库-CSDN博客
代码中Logger测试见文章#xff1a; c中spdlog的使用/python中logger的使用-CSDN博客
1、main.cpp
收…一、c
个人测试记录有问题还请指出谢谢
参考C开发基础之网络编程WinSock库使用详解TCP/UDP Socket开发_c udp使用什么库-CSDN博客
代码中Logger测试见文章 c中spdlog的使用/python中logger的使用-CSDN博客
1、main.cpp
收发TCP信号
#include iostream
#include thread
#include vector#include Logger.h
#include SocketManager.h#pragma warning(disable:4996)int main() {initLogger();SocketManager socket_manager;// 使用 std::thread 并传递成员函数的指针和对象实例的引用std::thread t1(SocketManager::get_from_tcp, socket_manager, 11100);// std::thread t2(SocketManager::get_from_udp, socket_manager, 11111);std::thread t3(SocketManager::send_to_tcp, socket_manager, 123456, 127.0.0.1, 11100);// std::thread t4(SocketManager::send_to_udp, socket_manager, 123456, 127.0.0.1, 11111);t1.detach();// t2.detach();t3.detach();// t4.detach();Sleep(6000000);return 0;
} 运行结果如下 收发UDP信号
#include iostream
#include thread
#include vector#include Logger.h
#include SocketManager.h#pragma warning(disable:4996)int main() {initLogger();SocketManager socket_manager;// 使用 std::thread 并传递成员函数的指针和对象实例的引用// std::thread t1(SocketManager::get_from_tcp, socket_manager, 11100);std::thread t2(SocketManager::get_from_udp, socket_manager, 11111);// std::thread t3(SocketManager::send_to_tcp, socket_manager, 123456, 127.0.0.1, 11100);std::thread t4(SocketManager::send_to_udp, socket_manager, 123456, 127.0.0.1, 11111);// t1.detach();t2.detach();// t3.detach();t4.detach();Sleep(6000000);return 0;
} 运行结果如下 2、SocketManager.h
// #pragma once // 为确保在不同编译环境中使用可以使用#define的方法
#ifndef SOCKETMANAGER_H
#define SOCKETMANAGER_H#include iostream
#include stdio.h
#include winsock2.h
#include string
#include Logger.h#pragma comment(lib, ws2_32.lib)
#pragma warning(disable:4996)std::string asciiToHex(const std::string asciiStr); // 将ascii码转为十六进制class SocketManager {
public:SocketManager();~SocketManager();void initialization(); // 初始化套接字库void get_from_udp(int); // 从客户端接收发来的udp信息void get_from_tcp(int); // 从客户端接收发来的tcp信息void send_to_tcp(std::string, std::string, int); // 向服务端发送tcp信息void send_to_udp(std::string, std::string, int); // 向服务端发送udp信息private://定义服务端套接字接受请求套接字SOCKET ListenSocket_UDP_get;SOCKET ListenSocket_TCP_get;SOCKET SendSocket_UDP_to;SOCKET SendSocket_TCP_to;//服务端/客户端地址SOCKADDR_IN service_UDP_get;SOCKADDR_IN service_TCP_get;SOCKADDR_IN service_UDP_to;SOCKADDR_IN service_TCP_to;
};#endif // SOCKETMANAGER_H3、SocketManager.cpp
#include SocketManager.hSocketManager::SocketManager() {ListenSocket_UDP_get INVALID_SOCKET;ListenSocket_TCP_get INVALID_SOCKET;SendSocket_UDP_to INVALID_SOCKET;SendSocket_TCP_to INVALID_SOCKET;
}SocketManager::~SocketManager() {if (ListenSocket_UDP_get ! INVALID_SOCKET) {closesocket(ListenSocket_UDP_get);WSACleanup();}if (ListenSocket_TCP_get ! INVALID_SOCKET) {closesocket(ListenSocket_TCP_get);WSACleanup();}if (SendSocket_UDP_to ! INVALID_SOCKET) {closesocket(SendSocket_UDP_to);WSACleanup();}if (SendSocket_TCP_to ! INVALID_SOCKET) {closesocket(SendSocket_TCP_to);WSACleanup();}
}void SocketManager::get_from_udp(int port) {// 初始化套接字库initialization();// 创建套接字ListenSocket_UDP_get socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (ListenSocket_UDP_get INVALID_SOCKET) {logger-error(创建套接字失败: WSAGetLastError());std::cout 创建套接字失败: WSAGetLastError() std::endl;WSACleanup();exit(0);}//填充服务端信息service_UDP_get.sin_family AF_INET; // 设置地址族为 IPv4service_UDP_get.sin_addr.s_addr INADDR_ANY; // 将 IP 地址设置为 0.0.0.0表示绑定到所有本地 IP 地址service_UDP_get.sin_port htons(port); // 将端口号转换为网络字节序并设置为指定的端口号// 绑定套接字if (bind(ListenSocket_UDP_get, (SOCKADDR*)service_UDP_get, sizeof(service_UDP_get)) SOCKET_ERROR){logger-error(绑定套接字失败: WSAGetLastError());std::cout 绑定套接字失败: WSAGetLastError() std::endl;closesocket(ListenSocket_UDP_get);WSACleanup();exit(0);}char recvbuf[512]; // 定义接收信息的缓冲区大小为512字节int iRecvResult; // 存储接收操作的返回结果sockaddr_in clientAddr; // 用于存储客户端的地址信息int iAddrLen sizeof(clientAddr); // 存储地址结构体的大小do{ std::cout 服务端正在等待数据发送请稍候.... std::endl;// 接收来自客户端的数据iRecvResult recvfrom(ListenSocket_UDP_get, recvbuf, sizeof(recvbuf), 0, (SOCKADDR*)clientAddr, iAddrLen);// std::cout iRecvResult std::endl;// 检查接收操作是否成功if (iRecvResult 0){std::string result(recvbuf, iRecvResult);std::cout 收到信息 result std::endl;logger-info(收到信息 result);// 将接收到的数据发送回客户端// sendto(ListenSocket_UDP, recvbuf, iRecvResult, 0, (SOCKADDR*)clientAddr, sizeof(clientAddr));}else if (iRecvResult 0){std::cout 连接关闭 std::endl;logger-info(连接关闭);}else{std::cout 接受信息失败 WSAGetLastError() std::endl;logger-error(接受信息失败 WSAGetLastError());closesocket(ListenSocket_UDP_get);WSACleanup();}} while (iRecvResult 0);closesocket(ListenSocket_UDP_get);WSACleanup();
}void SocketManager::initialization() {//初始化套接字库WORD w_req MAKEWORD(2, 2);//版本号WSADATA wsadata;int err;err WSAStartup(w_req, wsadata);if (err ! 0) {std::cout 初始化套接字库失败 std::endl;}//检测版本号if (LOBYTE(wsadata.wVersion) ! 2 || HIBYTE(wsadata.wHighVersion) ! 2) {std::cout 套接字库版本号不符 std::endl;WSACleanup();}//填充服务端地址信息
}void SocketManager::send_to_tcp(std::string str, std::string ip, int port) {int send_len 0;// 初始化套接字库initialization();//填充服务端信息service_TCP_to.sin_family AF_INET;service_TCP_to.sin_addr.S_un.S_addr inet_addr(ip.c_str());service_TCP_to.sin_port htons(port);//创建套接字SendSocket_TCP_to socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (SendSocket_TCP_to INVALID_SOCKET) {logger-error(创建套接字失败: WSAGetLastError());std::cout 创建套接字失败: WSAGetLastError() std::endl;WSACleanup();exit(1);}if (connect(SendSocket_TCP_to, (SOCKADDR*)service_TCP_to, sizeof(SOCKADDR)) SOCKET_ERROR) {std::cout 服务器连接失败 WSAGetLastError() std::endl;logger-error(服务器连接失败 WSAGetLastError());WSACleanup();exit(1);}// 发送信息send_len send(SendSocket_TCP_to, str.c_str(), str.size(), 0);if (send_len 0) {std::cout 发送失败: WSAGetLastError() std::endl;logger-error(发送失败: WSAGetLastError());}std::cout send_len 发送成功 std::endl;//关闭套接字//closesocket(SendSocket_TCP_to);//释放DLL资源//WSACleanup();
}void SocketManager::get_from_tcp(int port) {// 初始化套接字库initialization();// 创建套接字ListenSocket_TCP_get socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // tcp与udp之间有所不同if (ListenSocket_TCP_get INVALID_SOCKET) {logger-error(创建套接字失败: WSAGetLastError());std::cout 创建套接字失败: WSAGetLastError() std::endl;WSACleanup();exit(1);}//填充服务端信息service_TCP_get.sin_family AF_INET; // 设置地址族为 IPv4service_TCP_get.sin_addr.s_addr INADDR_ANY; // 将 IP 地址设置为 0.0.0.0表示绑定到所有本地 IP 地址service_TCP_get.sin_port htons(port); // 将端口号转换为网络字节序并设置为指定的端口号// 绑定套接字if (bind(ListenSocket_TCP_get, (SOCKADDR*)service_TCP_get, sizeof(service_TCP_get)) SOCKET_ERROR){logger-error(绑定套接字失败: WSAGetLastError());std::cout 绑定套接字失败: WSAGetLastError() std::endl;closesocket(ListenSocket_TCP_get);WSACleanup();exit(1);}char recvbuf[512]; // 定义接收信息的缓冲区大小为512字节int iRecvResult; // 存储接收操作的返回结果int len 0;//设置套接字为监听状态if (listen(ListenSocket_TCP_get, SOMAXCONN) 0) {std::cout 设置监听状态失败: WSAGetLastError() std::endl;logger-error(设置监听状态失败: WSAGetLastError());WSACleanup();}std::cout 服务端正在监听连接请稍候.... std::endl;len sizeof(service_TCP_get);SOCKET ClientSocket INVALID_SOCKET; // 初始化 ClientSocket 变量并将其设置为无效的套接字do{std::cout 服务端正在等待数据发送请稍候.... std::endl;ClientSocket accept(ListenSocket_TCP_get, (SOCKADDR*)service_TCP_get, len); // 等待客户端连接请求并接受连接/*accept 函数会阻塞直到有客户端连接请求到达然后返回一个新的套接字ListenSocket_TCP_get 是服务器监听的套接字service_TCP_get 是用于存储客户端地址信息的结构体len 是地址结构体的大小accept 函数调用时会被更新为实际的地址大小*/// std::cout ClientSocket std::endl;if (ClientSocket SOCKET_ERROR) {std::cout 算法端连接失败: WSAGetLastError() std::endl;logger-error(算法端连接失败: WSAGetLastError());WSACleanup();exit(2);}// 接收来自客户端的数据iRecvResult recv(ClientSocket, recvbuf, sizeof(recvbuf), 0);// 检查接收操作是否成功if (iRecvResult 0){// std::cout iRecvResult std::endl;std::string result(recvbuf, iRecvResult);std::cout 收到信息 result std::endl;logger-info(收到信息 result);// 将接收到的数据发送回客户端// sendto(ListenSocket_UDP, recvbuf, iRecvResult, 0, (SOCKADDR*)clientAddr, sizeof(clientAddr));}else if (iRecvResult 0){std::cout 连接关闭 std::endl;logger-info(连接关闭);}else{std::cout 接受信息失败 WSAGetLastError() std::endl;logger-error(接受信息失败 WSAGetLastError());closesocket(ListenSocket_UDP_get);WSACleanup();}} while (iRecvResult 0);closesocket(ListenSocket_TCP_get);WSACleanup();
}void SocketManager::send_to_udp(std::string str, std::string ip, int port) {int send_len 0;// 初始化套接字库initialization();//填充服务端信息service_UDP_to.sin_family AF_INET;service_UDP_to.sin_addr.S_un.S_addr inet_addr(ip.c_str());service_UDP_to.sin_port htons(port);//创建套接字SendSocket_UDP_to socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);if (SendSocket_UDP_to INVALID_SOCKET) {logger-error(创建套接字失败: WSAGetLastError());std::cout 创建套接字失败: WSAGetLastError() std::endl;WSACleanup();exit(0);}int iSendResult sendto(SendSocket_UDP_to, str.c_str(), str.size(), 0, (SOCKADDR*)service_UDP_to, sizeof(service_UDP_to));if (iSendResult SOCKET_ERROR) {std::cout 发送失败: WSAGetLastError() std::endl;logger-error(发送失败: WSAGetLastError());}//关闭套接字closesocket(SendSocket_UDP_to);//释放DLL资源WSACleanup();
}std::string asciiToHex(const std::string asciiStr) {std::string hexStr;for (char c : asciiStr) {unsigned char value static_castunsigned char(c);hexStr std::to_string(static_castint(value 4)) std::to_string(static_castint(value 0x0F));}return hexStr;
}
文章转载自: http://www.morning.zlmbc.cn.gov.cn.zlmbc.cn http://www.morning.wwxg.cn.gov.cn.wwxg.cn http://www.morning.sbkb.cn.gov.cn.sbkb.cn http://www.morning.tbjb.cn.gov.cn.tbjb.cn http://www.morning.trsdm.cn.gov.cn.trsdm.cn http://www.morning.rshijie.com.gov.cn.rshijie.com http://www.morning.cpmwg.cn.gov.cn.cpmwg.cn http://www.morning.mspkz.cn.gov.cn.mspkz.cn http://www.morning.pgkpt.cn.gov.cn.pgkpt.cn http://www.morning.ydzly.cn.gov.cn.ydzly.cn http://www.morning.rhmt.cn.gov.cn.rhmt.cn http://www.morning.3dcb8231.cn.gov.cn.3dcb8231.cn http://www.morning.mpszk.cn.gov.cn.mpszk.cn http://www.morning.ghxsn.cn.gov.cn.ghxsn.cn http://www.morning.ktnt.cn.gov.cn.ktnt.cn http://www.morning.nhdmh.cn.gov.cn.nhdmh.cn http://www.morning.synlt.cn.gov.cn.synlt.cn http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn http://www.morning.pqkgb.cn.gov.cn.pqkgb.cn http://www.morning.ljcf.cn.gov.cn.ljcf.cn http://www.morning.yzzfl.cn.gov.cn.yzzfl.cn http://www.morning.nhdw.cn.gov.cn.nhdw.cn http://www.morning.gwsdt.cn.gov.cn.gwsdt.cn http://www.morning.rfzzw.com.gov.cn.rfzzw.com http://www.morning.rryny.cn.gov.cn.rryny.cn http://www.morning.msgrq.cn.gov.cn.msgrq.cn http://www.morning.dpdr.cn.gov.cn.dpdr.cn http://www.morning.jycr.cn.gov.cn.jycr.cn http://www.morning.wgbsm.cn.gov.cn.wgbsm.cn http://www.morning.tpyrn.cn.gov.cn.tpyrn.cn http://www.morning.lmknf.cn.gov.cn.lmknf.cn http://www.morning.clbzy.cn.gov.cn.clbzy.cn http://www.morning.qbksx.cn.gov.cn.qbksx.cn http://www.morning.kcbml.cn.gov.cn.kcbml.cn http://www.morning.yngtl.cn.gov.cn.yngtl.cn http://www.morning.cwgn.cn.gov.cn.cwgn.cn http://www.morning.jcnmy.cn.gov.cn.jcnmy.cn http://www.morning.rbffj.cn.gov.cn.rbffj.cn http://www.morning.yaqi6.com.gov.cn.yaqi6.com http://www.morning.zmpsl.cn.gov.cn.zmpsl.cn http://www.morning.ccyns.cn.gov.cn.ccyns.cn http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn http://www.morning.sthp.cn.gov.cn.sthp.cn http://www.morning.hqrkq.cn.gov.cn.hqrkq.cn http://www.morning.saletj.com.gov.cn.saletj.com http://www.morning.nydtt.cn.gov.cn.nydtt.cn http://www.morning.pbtrx.cn.gov.cn.pbtrx.cn http://www.morning.tgxrm.cn.gov.cn.tgxrm.cn http://www.morning.ydhck.cn.gov.cn.ydhck.cn http://www.morning.tnhqr.cn.gov.cn.tnhqr.cn http://www.morning.qlrtd.cn.gov.cn.qlrtd.cn http://www.morning.qmzhy.cn.gov.cn.qmzhy.cn http://www.morning.pfbx.cn.gov.cn.pfbx.cn http://www.morning.sjwzz.cn.gov.cn.sjwzz.cn http://www.morning.qsy40.cn.gov.cn.qsy40.cn http://www.morning.ykrkq.cn.gov.cn.ykrkq.cn http://www.morning.fxzgw.com.gov.cn.fxzgw.com http://www.morning.rqgq.cn.gov.cn.rqgq.cn http://www.morning.knrgb.cn.gov.cn.knrgb.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.qgkcs.cn.gov.cn.qgkcs.cn http://www.morning.gxqpm.cn.gov.cn.gxqpm.cn http://www.morning.pmysp.cn.gov.cn.pmysp.cn http://www.morning.skql.cn.gov.cn.skql.cn http://www.morning.xtyyg.cn.gov.cn.xtyyg.cn http://www.morning.ymfzd.cn.gov.cn.ymfzd.cn http://www.morning.fydsr.cn.gov.cn.fydsr.cn http://www.morning.dnpft.cn.gov.cn.dnpft.cn http://www.morning.kqylg.cn.gov.cn.kqylg.cn http://www.morning.tgnwt.cn.gov.cn.tgnwt.cn http://www.morning.djxnn.cn.gov.cn.djxnn.cn http://www.morning.jpydf.cn.gov.cn.jpydf.cn http://www.morning.fhyhr.cn.gov.cn.fhyhr.cn http://www.morning.qfths.cn.gov.cn.qfths.cn http://www.morning.ctxt.cn.gov.cn.ctxt.cn http://www.morning.rnygs.cn.gov.cn.rnygs.cn http://www.morning.zqsnj.cn.gov.cn.zqsnj.cn http://www.morning.qphcq.cn.gov.cn.qphcq.cn http://www.morning.stbfy.cn.gov.cn.stbfy.cn http://www.morning.lsqmb.cn.gov.cn.lsqmb.cn