C++怎么实现聊天小程序
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"C++怎么实现聊天小程序",在日常操作中,相信很多人在C++怎么实现聊天小程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++怎么实现聊天小程序"
千家信息网最后更新 2026年10月31日C++怎么实现聊天小程序
这篇文章主要介绍"C++怎么实现聊天小程序",在日常操作中,相信很多人在C++怎么实现聊天小程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++怎么实现聊天小程序"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
涉及的技术:
c++网络编程
c++多线程
c++ STL
设计原理
以一个结构体的形式存储客户端,用vector存取存在的客户端,开启多线程处理逻辑
服务器允许登陆多个客户端,允许公屏聊天也允许私聊,默认情况下属于公屏聊天,若想私聊,格式为"@用户名+要发送的消息";运行效果如下图:
服务器实现
#include "stdafx.h"#include#include "windows.h" //一定要包含该头文件#include "process.h"#include #include #include using namespace std;#pragma comment(lib, "WS2_32.lib") //显示加载 ws2_32.dll ws2_32.dll就是最新socket版本int g_curPlayerNum = 0; //当前连接数const char*g_PlayerName[] = //假定的聊天者名字{ "aaaa", "bbbb", "cccc", "dddd",};struct PlayerInfo //利用结构存储连接的客户端{ SOCKET sock; string name;};vector g_clientSockList; //利用vector存取已连接的客户端void process(void*param){ int index = *(int*)param; //当前子线程编号 while (1) { //服务器接收信息 //int index = *(int*)param; char buf[2048] = { 0 }; //接收缓冲区 int bytes; if ((bytes = recv(g_clientSockList[index].sock, buf, sizeof(buf), 0)) == SOCKET_ERROR) { cout << "服务器接收数据失败!" << endl; } //服务器转发(含逻辑处理) if (buf[0] == "@") { //私聊 string Buf(buf); string recvPlayerName = Buf.substr(1, 4); //分离出接收者名字 copy(g_clientSockList[index].name.begin(), g_clientSockList[index].name.end(), &buf[1]); for (vector ::iterator it = g_clientSockList.begin(); it != g_clientSockList.end(); it++) { if (it->name == recvPlayerName) { if (send(it->sock, buf, strlen(buf), 0) == SOCKET_ERROR) { cout << "发送数据失败 to" << it->name << endl; } break; } } } else //群聊 cout << g_clientSockList[index].name << "对" << "所有人说:" << buf << endl; }}int main(){ cout << "-----------聊天室服务器-----------" << endl; //套接字初始化 WSADATA wsaData; //这个结构被用来存储被WSAStartup函数调用后返回的 Windows Sockets 数据。 WORD sockVersion = MAKEWORD(2, 2); //windows网络编程库的版本号信息 if (WSAStartup(sockVersion, &wsaData) != 0) //WSAStartup函数是在程序中初始化并加载Windows网络 { cout << "套接字初始化失败!" << endl; return 0; } //创建服务器套接字 SOCKET SeverSocket; if ((SeverSocket = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR) { cout << "套接字创建失败!" << endl; return 0; } struct sockaddr_in SeverAddress; //一个绑定地址:有IP地址,有端口号,有协议族 memset(&SeverAddress, 0, sizeof(sockaddr_in)); //初始化结构体 SeverAddress.sin_family = AF_INET; SeverAddress.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//填入本机IP地址 SeverAddress.sin_port = htons(60000);//设定端口号 //绑定套接字 指定绑定的IP地址和端口号 if (bind(SeverSocket, (sockaddr*)&SeverAddress, sizeof(SeverAddress)) == SOCKET_ERROR) { cout << "套接字绑定失败!"< 客户端
#include "stdafx.h"#include "windows.h"#include "iostream"#include "process.h"#includeusing namespace std;#pragma comment(lib, "ws2_32.lib")void Receive(void *param){ string msg; while (1) { //客户端接受来自服务器的数据 SOCKET clientSocket = *(SOCKET*)(param); char recvbuf[2048] = {}; //接收缓冲区 if (recv(clientSocket, recvbuf, 2048, 0) == SOCKET_ERROR) { cout << "数据接受失败" << endl; } else { msg = recvbuf; char sendPlayerName[5] = { 0 }; int len = strlen(recvbuf); //消息长度 copy(&recvbuf[1], &recvbuf[5], sendPlayerName); //分离出名字 msg = msg.substr(5, len - 5); cout << sendPlayerName << "对你说:" << msg< 到此,关于"C++怎么实现聊天小程序"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
服务器
服务
客户
客户端
地址
套接字
口号
数据
线程
程序
结构
C++
消息
学习
名字
缓冲区
网络
c++
本机
存储
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海喔噻互联网科技有限公司
深圳市人人互联网科技有限公司
互联网科技公司税收优惠
奇酷互联网科技公司
远拓互联网科技
互联网科技类展会
成都仁贤领冠互联网科技有限公司
顶级互联网科技成果有哪些
上海宁丞科技互联网
注册互联网科技公司经营范围大全
互联网科技和信息
青海科技产业互联网发展
玉溪新华互联网科技好不好
卓翼科技产业互联网合作
昆明中奇联合互联网科技
互联网科技平台产品运营
北京天晋互联网科技有限公司
绵阳真晨互联网科技有限公司
互联网科技创新创业项目
陕西彩京云互联网科技有限公司
什么是科技互联网
艾特科技互联网
广州凡科互联网科技
互联网科技创新企业排名
苏州五指互联网络科技有限
开一家科技互联网公司需要多少钱
昆明中奇联合互联网科技
互联网科技平台产品运营
上海万顺科技互联网有限公司招聘
上海互联网科技园景观