C++如何实现即时通信
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,本篇内容主要讲解"C++如何实现即时通信",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++如何实现即时通信"吧!软件:VS服务器端//TcpServer
千家信息网最后更新 2025年01月16日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安全错误
数据库的锁怎样保障安全
做软件开发的男生很有钱吗
网络安全利与弊表格
新服务器安装指定版本宝塔
机关网络安全要求
网络技术用英语短语怎么说
国内的做网络安全的公司排名
软件开发工程师面试总结
沈阳学软件开发培训哪家好
街道网络安全整治工作总结
西电的服务器
上海ntp校时服务器ip
可以独立于数据库管理的阶段
近4年网络安全事件
网址数据库错误
软件开发企业应收账款的特征
电脑服务器加装系统
网络安全宣传发言稿
数据库and连接
2022年网络安全工作计划
277v 服务器电源线
公司网络安全工作情况总结
成都招银科技软件开发
数据库的物理结构设计论文格式
数据库建表时间类型
德州蚂蚁软件开发有限公司
java软件开发必学
d-link 虚拟服务器
互联网金融的监管科技
nas FTP服务器
在上海做数据库开发一年工作经验