十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要介绍“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++怎么实现聊天小程序
本文地址:http://6mz.cn/article/ieogge.html