C++基于socket UDP网络编程怎么实现聊天室功能
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本文小编为大家详细介绍"C++基于socket UDP网络编程怎么实现聊天室功能",内容详细,步骤清晰,细节处理妥当,希望这篇"C++基于socket UDP网络编程怎么实现聊天室功能"文章能帮助大家
千家信息网最后更新 2026年11月04日C++基于socket UDP网络编程怎么实现聊天室功能
本文小编为大家详细介绍"C++基于socket UDP网络编程怎么实现聊天室功能",内容详细,步骤清晰,细节处理妥当,希望这篇"C++基于socket UDP网络编程怎么实现聊天室功能"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
0.通信步骤流程图
(左:服务器;右:客户端;)
1.服务器代码
1.1服务器类头文件(CServer_UDP.h)
#pragma once #includeclass CServer_UDP{public: CServer_UDP(); void SendMsg(const char sendBuf[]); void RecMsg(); ~CServer_UDP(); private: SOCKET m_sServer; struct sockaddr_in m_SocAddrClient; //建立连接时,用于保存客户端信息 bool m_terminal;};
1.2服务器类源文件(CServer_UDP.cpp)
#define _WINSOCK_DEPRECATED_NO_WARNINGS#include "CServer_UDP.h" #include#pragma comment(lib, "ws2_32.lib") CServer_UDP::CServer_UDP():m_terminal(false){ //必须进行如下初始化, 否则socket()会返回10093错误 //初始化WSA WORD sockVersion = MAKEWORD(2, 2); WSADATA wsaData; if (WSAStartup(sockVersion, &wsaData) != 0) //通过一个进程初始化ws2_32.dll { std::cout << "Initialize WSA failed" << std::endl; return; } //初始化UDDP套接字 m_sServer = socket(AF_INET, SOCK_DGRAM, 0); struct sockaddr_in m_SocAddrserver; m_SocAddrserver.sin_addr.S_un.S_addr = 0;//htonl(INADDR_ANY); m_SocAddrserver.sin_family = AF_INET; m_SocAddrserver.sin_port = htons(8090); int ret = bind(m_sServer, (sockaddr*)&m_SocAddrserver, sizeof(m_SocAddrserver)); if (ret == -1) { std::cout << "bind failed!" << std::endl; WSACleanup(); } else { //此处必须赋初值,不然会导致服务器端无法正常发送 int len_Client = sizeof(sockaddr); char recBuf[1025]; int len = recvfrom(m_sServer, recBuf, 1024, 0, (sockaddr*)&m_SocAddrClient, &len_Client); if (len > 0) { recBuf[len] = '\0'; std::cout << "Client say:" << recBuf << std::endl; } } }void CServer_UDP::SendMsg(const char sendBuf[]){ int ret = sendto(m_sServer, sendBuf, strlen(sendBuf), 0, (sockaddr*)&m_SocAddrClient, sizeof(m_SocAddrClient)); if (ret == -1) { std::cout << "send failed" << std::endl; std::cout << GetLastError()<< std::endl; }}void CServer_UDP::RecMsg(){ char recBuf[1025]; while (!m_terminal) { //std::cout << "Begin rec...(server)" << std::endl; int len = recvfrom(m_sServer, recBuf, 1024, 0, 0, 0); if (len > 0) { recBuf[len] = '\0'; std::cout << "Client say:" << recBuf << std::endl; } } }CServer_UDP::~CServer_UDP(){ closesocket(m_sServer); WSACleanup(); }
1.3服务器主函数
#include#include #include #include "CServer_UDP.h" using namespace std; int main(){ CServer_UDP server_UDP; thread recProc(&CServer_UDP::RecMsg, &server_UDP); while (1) { //cout << "Pleaes input content:" << endl; string content; cin >> content; server_UDP.SendMsg(content.c_str()); } recProc.join(); cout << "I love china!" << endl; system("pause"); return 0;}
2.客户端代码
2.1客户端类头文件(CClient.h)
#pragma once #includeclass CClient{public: CClient(); void RecMsg(); void SendMsg(const char sendBuf[]); ~CClient();private: SOCKET m_sockClient; sockaddr_in m_TargetServer;};
2.2客户端类源文件(CClient.cpp)
#define _WINSOCK_DEPRECATED_NO_WARNINGS#include "CClient.h" #include#pragma comment(lib, "ws2_32.lib") CClient::CClient(){ //必须进行如下初始化, 否则socket()会返回10093错误 //初始化WSA WORD sockVersion = MAKEWORD(2, 2); WSADATA wsaData; if (WSAStartup(sockVersion, &wsaData) != 0) //通过一个进程初始化ws2_32.dll { std::cout << "Initialize WSA failed" << std::endl; return; } m_sockClient = socket(AF_INET, SOCK_DGRAM, 0); m_TargetServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); m_TargetServer.sin_family = AF_INET; m_TargetServer.sin_port = htons(8090); if (m_sockClient == -1) { std::cout << "Create socket failed!" << std::endl; WSACleanup(); } else { //发送信息与服务器建立连接(必须加) sendto(m_sockClient, "hello server", strlen("hello server"), 0, (sockaddr*)&m_TargetServer, sizeof(m_TargetServer)); }} void CClient::SendMsg(const char sendBuf[]){ sendto(m_sockClient, sendBuf, strlen(sendBuf), 0, (sockaddr*)&m_TargetServer, sizeof(m_TargetServer));}void CClient::RecMsg(){ char recBuf[1025]; while (1) { //std::cout << "Begin rec...(client)" << std::endl; int len = recvfrom(m_sockClient, recBuf, 1024, 0, 0, 0); if (len > 0) { recBuf[len] = '\0'; std::cout << "Server say: " << recBuf << std::endl; } } }CClient::~CClient(){ closesocket(m_sockClient); WSACleanup();}
2.3客户端主函数
#include#include #include #include "CClient.h" using namespace std; int main(){ CClient client_UDP; thread RecProc(&CClient::RecMsg, &client_UDP); while (1) { //cout << "Please input content:" << endl; string content; cin >> content; client_UDP.SendMsg(content.c_str()); } RecProc.join(); cout << "I love china!" << endl; system("pause"); return 0;}
3.效果图(win7+VS2017)
3.1服务端
3.2客户端
读到这里,这篇"C++基于socket UDP网络编程怎么实现聊天室功能"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
客户
客户端
服务
服务器
功能
网络
网络编程
聊天室
C++
编程
文章
代码
信息
内容
函数
文件
服务器类
步骤
源文件
进程
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
深圳九邦互联网科技有限公司
云之行互联网科技
互联网科技深圳
科技与互联网发展
奇酷互联网络科技
友谊互联网络科技
上游互联网科技
互联网科技美容
互联网科技视频素材
互联网科技博客
盛创互联网科技有限公司
互联网系的金融科技公司
互联网科技和法律行业
滨湖区互联网智能科技产品有哪些
无锡工业互联网科技有限公司
黑云互联网科技有限公司
福建互联网展示科技馆设计
陕西九四连强互联网科技有限公司
广州智享互联网科技
互联网科技品牌
小米移动互联网科技园
科技创新与互联网经济
互联网通讯科技
互联网金融 金融科技
北京禾田雨橡互联网科技
广州优美互联网科技
茂名市互联网科技产业园
杭州壁岐互联网科技有限公司
互联网公司黑科技创始人
中国新注册互联网科技