C++如何实现即时通信
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"C++如何实现即时通信",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++如何实现即时通信"吧!软件:VS服务器端//TcpServer
千家信息网最后更新 2025年11月07日C++如何实现即时通信
本篇内容主要讲解"C++如何实现即时通信",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++如何实现即时通信"吧!
软件:VS
服务器端
//TcpServer_plus.exe#include#include #include #pragma comment(lib,"ws2_32.lib")#include using namespace std;#include SOCKADDR_IN cAddr = { 0 };int len = sizeof cAddr;SOCKET clientSocket[1001];//同时最多容纳1000人在线void chat(int n) { char buff[1024]; int r; while (1) { r = recv(clientSocket[n], buff, 1023, NULL); if (r > 0) { buff[r] = 0; //cout << inet_ntoa(cAddr.sin_addr) << "发来的消息: " << buff; printf("%s发来的信息:%s\n", inet_ntop(AF_INET, (void*)&cAddr.sin_addr, buff, 1023), buff); } }}int main() { //1.确定协议版本 WSADATA wsadata; WSAStartup(MAKEWORD(2, 2), &wsadata);//2.2版本 if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2) { cout << "确认版本失败!\n" << endl; return -1; } cout << "确认版本成功!" << endl; //2.创建Socket SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//参数:协议类型、通信载体(字节流)、ip保护方式 if (serverSocket == SOCKET_ERROR) { cout << "创建socket失败!" << GetLastError() << endl; //9.清楚版本信息 WSACleanup(); return -1; } cout << "socket创建成功!" << endl; //3.创建服务器协议地址族 //就是一个结构体 SOCKADDR_IN addr = { 0 }; addr.sin_family = AF_INET; inet_pton(AF_INET, "192.168.31.100", (void*)&addr.sin_addr.S_un.S_addr); //addr.sin_addr.S_un.S_addr = inet_addr("192.168.31.100");//局域网地址 addr.sin_port = htons(9999);//设置端口号 小端转大端 //4.绑定 int r = bind(serverSocket, (struct sockaddr*)&addr, sizeof addr); if (r == -1) { cout << "绑定失败!" << GetLastError() << endl; //8.关闭socket closesocket(serverSocket); //9.清除版本信息 WSACleanup(); return -1; } cout << "绑定成功!" << endl; //5.监听 r = listen(serverSocket, 10); if (r == -1) { cout << "监听失败!" << GetLastError() << endl; //8.关闭socket closesocket(serverSocket); //9.清除版本信息 WSACleanup(); return -1; } cout << "监听成功!" << endl; //6.等待客户端连接(多客户端连接) for (int i = 0; i < 1001; i++) { clientSocket[i] = accept(serverSocket, (sockaddr*)&cAddr, &len);//获取客户端的socket if (clientSocket[i] == SOCKET_ERROR) { cout << "客户端连接失败:" << GetLastError() << endl; //关闭socket closesocket(serverSocket); //9.清楚版本信息 WSACleanup(); return -1; } cout << "客户端连接成功!" << endl; //7 通信 多线程实现 chat函数实现 CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)chat, (LPVOID)i, NULL, NULL);//多线程实现 } //8.关闭socket closesocket(serverSocket); //9.清理协议版本信息 WSACleanup(); while (1);//停顿 return 0;}
客户端
多次点击TcpClient.exe可以产生多个窗口
//TcpClient.exe#include#include #include #pragma comment(lib,"ws2_32.lib")#include using namespace std;#include int main() { //1.确定协议版本 WSADATA wsadata; WSAStartup(MAKEWORD(2, 2), &wsadata);//2.2版本 if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2) { cout << "确认版本失败!\n" << endl; return -1; } cout << "确认版本成功!" << endl; //2.创建Socket SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//参数:协议类型、通信载体(字节流)、ip保护方式 if (clientSocket == SOCKET_ERROR) { cout << "创建socket失败!" << GetLastError() << endl; //9.清楚版本信息 WSACleanup(); return -1; } cout << "socket创建成功!" << endl; //3.获取服务器协议地址族 //就是一个结构体 SOCKADDR_IN addr = { 0 }; addr.sin_family = AF_INET; inet_pton(AF_INET, "192.168.31.100", (void*)&addr.sin_addr.S_un.S_addr); //addr.sin_addr.S_un.S_addr = inet_addr("192.168.31.100");//局域网地址 addr.sin_port = htons(9999);//设置端口号 小端转大端 //4.连接服务器 int r = connect(clientSocket, (sockaddr*)&addr,sizeof addr); if (r == -1) { cout << "连接服务器失败:" << GetLastError() << endl; //6.关闭socket closesocket(clientSocket); //7 清理版本信息 WSACleanup(); return -1; } cout << "服务器连接成功!" << endl; //5.通信 char buff[1024]; while (1) { cin >> buff;//用户输入信息 send(clientSocket, buff, strlen(buff), NULL);//发送信息 } //6.关闭socket closesocket(clientSocket); //7.清理协议版本信息 WSACleanup(); while (1);//停顿 return 0;}
运行效果:
到此,相信大家对"C++如何实现即时通信"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
版本
信息
成功
通信
客户
服务器
服务
客户端
地址
C++
清楚
监听
内容
参数
口号
大端
就是
局域
局域网
方式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库连接对象全局变量
做软件开发销售好做吗
网络安全vip视频教程免费
易迅网络安全教育
会计软件开发模型
网络安全技能解密关
研究生分布式数据库
空数据库是指
单机软件数据库选型
深圳市网络安全产业园
江西调度服务器批发虚拟主机
南通七和互联网科技有限公司
广东通信软件开发平均价格
实耐宝是互联网高科技公司吗
建党精神数据库
圣诚服务器
中国移动网络安全等级
杭州两倍网络技术有限公司
steam好友服务器死活连不上
可以做数据库的电脑
成都系统网络安全宣传周活动
超融合技术共享数据库
山西通用软件开发性价比
短期app软件开发培训班
数据库指定删除
深圳猪兼强互联网科技
软件开发步骤文档
软件从wincc上取数据库
上海铁路局网络安全知识
服务器管理口web进不去怎么办