广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >怎么用C++实现聊天小程序
  • 563
分享到

怎么用C++实现聊天小程序

2023-06-20 13:06:35 563人浏览 八月长安
摘要

本篇内容介绍了“怎么用c++实现聊天小程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C++写一个游戏聊天服务器,供大家参考,具体内容如下

本篇内容介绍了“怎么用c++实现聊天小程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

C++写一个游戏聊天服务器,供大家参考,具体内容如下

最近学习网络编程写了个聊天小程序,写个博客记录下自己的代码

涉及的技术:

设计原理

以一个结构体的形式存储客户端,用vector存取存在的客户端,开启多线程处理逻辑

服务器允许登陆多个客户端,允许公屏聊天也允许私聊,默认情况下属于公屏聊天,若想私聊,格式为“@用户名+要发送的消息”;运行效果如下图:

怎么用C++实现聊天小程序

服务器实现

#include "stdafx.h"#include <iOStream>  #include "windows.h" //一定要包含该头文件#include "process.h"#include <string>#include <vector>#include <alGorithm>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<PlayerInfo>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<PlayerInfo>::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 << "套接字绑定失败!"<<endl;  return 0; } //服务器监听  if (listen(SeverSocket, SOMAXCONN) == SOCKET_ERROR) //监听的第二个参数就是:能存放多少个客户端请求,到并发编程的时候很有用 {  cout << "监听失败!" << endl;  return 0; } else  cout << "服务器等待连接......" << endl; while (1) {  //服务器接受连接请求  sockaddr_in revClientAddress; //套接字的地址,端口  SOCKET revClientSocket = INVALID_SOCKET;  //用来接收客户端连接  //memset(&revClientAddress, 0, sizeof(revClientAddress));  int addlen = sizeof(revClientAddress);  if ((revClientSocket = accept(SeverSocket, (sockaddr*)&revClientAddress, &addlen)) == INVALID_SOCKET)  {   cout << "接受客户端连接失败!" << endl;   return 0;  }    PlayerInfo stPlayerInfo;  stPlayerInfo.sock = revClientSocket;  stPlayerInfo.name = g_PlayerName[g_curPlayerNum];  g_clientSockList.push_back(stPlayerInfo);  int temp = g_curPlayerNum;  _beginthread(process, 0, &temp);  //创建子线程来收发数据  g_curPlayerNum++;  cout << stPlayerInfo.name << "上线啦!" << endl; } return 0;}

客户端

#include "stdafx.h"#include "windows.h"#include "iostream"#include "process.h"#include <string>using 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<<endl;  }    }}void Send(void *param){ while (1) {  //客户端发送数据给服务器  SOCKET clientSocket = *(SOCKET*)(param);  char sendbuf[2048] = {};  //发送缓冲区  cin.getline(sendbuf, 2048);  if (send(clientSocket, sendbuf, strlen(sendbuf), 0) == SOCKET_ERROR)  {   cout << "发送消息失败!";  }  else   cout << "发送消息成功" << endl; }}int main(){ cout << "-----------个人客户端-----------" << endl; WSADATA  wsa; if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {  cout << "套接字初始化失败!"<<endl; } SOCKET clientSocket; if ((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) == SOCKET_ERROR) {  cout << "套接字创建失败!"<<endl; } Sleep(30); struct sockaddr_in ClientAddress;  //一个绑定地址:有IP地址,有端口号,有协议族 memset(&ClientAddress, 0, sizeof(sockaddr_in)); //初始化结构体 ClientAddress.sin_family = AF_INET; ClientAddress.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//填入本机IP地址  //ClientAddress.sin_port = htons(60001);//设定端口号 //绑定套接字     指定绑定的IP地址和端口号 if (bind(clientSocket, (sockaddr*)&ClientAddress, sizeof(ClientAddress)) == SOCKET_ERROR) {  cout << "套接字绑定失败!" << endl;  return 0; } struct sockaddr_in SeverAddress;  //服务器地址 也就是即将要连接的目标地址 memset(&SeverAddress, 0, sizeof(sockaddr_in));  SeverAddress.sin_family = AF_INET; SeverAddress.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");  //127.0.0.1表示本机ip地址 SeverAddress.sin_port = htons(60000);//设定端口号 //开始连接 if (connect(clientSocket, (sockaddr*)&SeverAddress, sizeof(SeverAddress)) == SOCKET_ERROR) {  cout << "客户端:和服务器连接失败!"<<endl;  return 0; } else  cout << "与服务器连接成功!" << endl; //创建两个子线程 _beginthread(Receive, 0, &clientSocket); _beginthread(Send, 0, &clientSocket); Sleep(INFINITE); //这里采用另外一种技术避免主线程执行完退出——使其无限期休眠 // 关闭socket if (clientSocket != INVALID_SOCKET) {  closesocket(clientSocket);  clientSocket = INVALID_SOCKET; }    return 0;}

“怎么用C++实现聊天小程序”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么用C++实现聊天小程序

本文链接: https://www.lsjlt.com/news/296736.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用C++实现聊天小程序
    本篇内容介绍了“怎么用C++实现聊天小程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C++写一个游戏聊天服务器,供大家参考,具体内容如下...
    99+
    2023-06-20
  • C++实现聊天小程序
    C++写一个游戏聊天服务器,供大家参考,具体内容如下 最近学习网络编程写了个聊天小程序,写个博客记录下自己的代码 涉及的技术: c++网络编程 c++多线程 ...
    99+
    2022-11-12
  • C++如何实现聊天小程序
    今天小编给大家分享一下C++如何实现聊天小程序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。涉及的技术:c++网络编程c++...
    99+
    2023-06-08
  • C++ SOCKET多线程怎么实现聊天小程序
    本篇内容介绍了“C++ SOCKET多线程怎么实现聊天小程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!TCP/IP协议与SOCKET什么...
    99+
    2023-06-08
  • C++怎么实现聊天程序
    这篇文章主要为大家展示了“C++怎么实现聊天程序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++怎么实现聊天程序”这篇文章吧。具体内容如下服务端#include<iostream>...
    99+
    2023-06-20
  • C++ SOCKET多线程实现聊天小程序
    本文实例为大家分享了C++ SOCKET多线程实现聊天小程序的具体代码,供大家参考,具体内容如下 TCP/IP协议与SOCKET 什么是网络协议? 计算机网络中,各个实体之间的数据交...
    99+
    2022-11-12
  • C++实现聊天程序
    本文实例为大家分享了C++实现聊天程序的具体代码,供大家参考,具体内容如下 服务端 #include<iostream> #include<WinSock2.h...
    99+
    2022-11-12
  • 怎么用python实现简单的聊天小程序
    这篇文章主要讲解了“怎么用python实现简单的聊天小程序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用python实现简单的聊天小程序”吧!概要这是一个使用python实现一个简单的...
    99+
    2023-06-20
  • C++ SOCKET多线程实现聊天小程序的方法
    本篇内容主要讲解“C++ SOCKET多线程实现聊天小程序的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++ SOCKET多线程实现聊天小程序的方法”吧!本文实例为大家分享了C++ SO...
    99+
    2023-06-20
  • 利用QT实现UDP聊天小程序
    利用QT的UDP技术,实现两个QT程序之间的聊天程序。 示例代码 #ifndef WIDGET_H #define WIDGET_H #include <QWidget&g...
    99+
    2022-11-21
    QT UDP聊天程序 QT UDP聊天 QT UDP
  • 怎么用Python基于udp协议实现聊天小程序
    这篇文章主要介绍“怎么用Python基于udp协议实现聊天小程序”,在日常操作中,相信很多人在怎么用Python基于udp协议实现聊天小程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python基于...
    99+
    2023-06-02
  • Java实现局域网聊天小程序
    本文实例为大家分享了Java实现局域网聊天的具体代码,供大家参考,具体内容如下 开发环境: IDEA 2018.2 集成开发工具。 实现功能: 1、用户上线,向服务器通知并注册。 2...
    99+
    2022-11-13
  • python实现简单的聊天小程序
    概要 这是一个使用python实现一个简单的聊天室的功能,里面包含群聊,私聊两种聊天方式.实现的方式是使用套接字编程的一个使用TCP协议 c/s结构的聊天室 实现思路 x01 服务端的建立 首先,在服务端,使用soc...
    99+
    2022-06-02
    python 聊天 小程序
  • 小程序实现实时聊天IM功能
    随着小程序的发展,给公司带来了不错的收益,但是有件比较苦恼的事情是,由于小程序没有即时聊天功能,这给公司的客服带来不少的麻烦,导致沟通没有时效性。通过更智能的企达第三方小程序IM,可以实现更多多维度的操作!主动邀请对话当用户进入小程序后,可...
    99+
    2023-06-05
  • 怎么在android中利用Socket实现一个聊天小程序
    本篇文章为大家展示了怎么在android中利用Socket实现一个聊天小程序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体内容如下服务器端:package org.hwq.echo; impo...
    99+
    2023-05-31
    android socket roi
  • 用Java实现聊天程序
    利用Java编写聊天程序,供大家参考,具体内容如下 首先计算机网络有两种传输层协议:TCP(面向连接),UDP(面向无连接)。今天就介绍基于这两种协议的聊天程序。 先查明自己电脑的主...
    99+
    2022-11-13
  • 【uni-app】小程序实现微信在线聊天(私聊/群聊)
    之前学习使用uni-app简单实现一个在线聊天的功能,今天记录一下项目核心功能的实现过程。页面UI以及功能逻辑全部来源于微信,即时聊天业务的实现使用socket.io,前端使用uni-app开发,后端服务器基于node实现,数据库选择mon...
    99+
    2023-09-03
    uni-app 前端 小程序
  • 微信小程序实现聊天室功能
    本文通过实例为大家分享了微信小程序实现聊天室的具体代码,供大家参考,具体内容如下 1.实现效果展示 2.room.wxml <view class="container"...
    99+
    2022-11-12
  • 微信小程序实现简单聊天室
    本文实例为大家分享了微信小程序实现简单聊天室的具体代码,供大家参考,具体内容如下 cha.js // pages/chat/chat.js // 获取小程序实例 let app ...
    99+
    2022-11-12
  • 微信小程序怎么实现仿微信聊天界面
    本篇内容介绍了“微信小程序怎么实现仿微信聊天界面”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!仿微信聊天界面,数据来自mock数据,支持聊天...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作