C++如何实现聊天小程序
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,今天小编给大家分享一下C++如何实现聊天小程序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解
千家信息网最后更新 2025年11月09日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++
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
smc免费数据库
在线教育软件开发的未来前景
网络安全主题简笔画视频
网络安全法 计入信用档案
光遇王者服务器对比表情包
京东科技互联网电视机
计算机网络技术专业讲座课程
数据库导出文件太大打不开
有起床战争的mc国际服服务器
数字地图数据库的技术
人渣scum服务器阿根廷怎么开
rust蓝衣军在哪个服务器
基于多网络的实时数据库技术
云服务器安全产品安全狗
湖南鸠鸠互联网科技有限公司
数据库中查询字符串长度
linux服务器端安全性
斗地主游戏软件开发
三调数据库属性代码zzsxmc
江西理工大学网络安全等级
网络技术静态路由器
开源卫星数据库
如何搭建缓存服务器
组态王软件开发者
win7管理服务器名称
搭建代理服务器
劲拓回流焊数据库
三级网络技术需要买书吗
新建本地数据库
linux服务器网络设置