C++怎么实现聊天小程序
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍"C++怎么实现聊天小程序",在日常操作中,相信很多人在C++怎么实现聊天小程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C++怎么实现聊天小程序"
千家信息网最后更新 2025年01月23日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安全错误
数据库的锁怎样保障安全
做软件开发需要什么证书
完美连接社区服务器失败有影响吗
吉夫森软件开发有限公司
自己搭建服务器vpn
在福州怎么找软件开发工作室
申亿五金软件开发
网络安全的保密性方法是
如何做好网络安全保密工作
软件开发公司的源代码管理
如何输出链表中第i个数据库
校园网络安全防护的研究目的
git的数据库多大
小喇叭下载软件开发
自动洗衣机软件开发
nod32网络安全套装怎么样
阿里云服务器计划任务
广州游戏软件开发公司的小知识
有关网络安全是什么的作文
计算机网络安全现状论文
江西省网络技术研究所
云呼叫中心软件开发
湖湘杯2020网络安全报名
灯塔行业专业软件开发
万方数据库怎样导文献
软件开发公司的源代码管理
需求在软件开发中的作用
泽夕互联网科技有限公司
银川市软件开发平台哪家好
广州游戏软件开发公司的小知识
扑拓网络技术有限公司