文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++如何实现即时通信

2023-06-30 13:10

关注

本篇内容主要讲解“C++如何实现即时通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++如何实现即时通信”吧!

软件:VS

服务器

//TcpServer_plus.exe#include<stdio.h>#include <Winsock2.h>#include<WS2tcpip.h>#pragma comment(lib,"ws2_32.lib")#include<iostream>using namespace std;#include<windows.h>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.创建SocketSOCKET 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.关闭socketclosesocket(serverSocket);//9.清除版本信息WSACleanup();return -1;}cout << "绑定成功!" << endl;//5.监听r = listen(serverSocket, 10);if (r == -1) {cout << "监听失败!" << GetLastError() << endl;//8.关闭socketclosesocket(serverSocket);//9.清除版本信息WSACleanup();return -1;}cout << "监听成功!" << endl;//6.等待客户端连接(多客户端连接)for (int i = 0; i < 1001; i++) {clientSocket[i] = accept(serverSocket, (sockaddr*)&cAddr, &len);//获取客户端的socketif (clientSocket[i] == SOCKET_ERROR) {cout << "客户端连接失败:" << GetLastError() << endl;//关闭socketclosesocket(serverSocket);//9.清楚版本信息WSACleanup();return -1;}cout << "客户端连接成功!" << endl;//7 通信  多线程实现 chat函数实现CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)chat, (LPVOID)i, NULL, NULL);//多线程实现}//8.关闭socketclosesocket(serverSocket);//9.清理协议版本信息WSACleanup();while (1);//停顿return 0;}

客户端

多次点击TcpClient.exe可以产生多个窗口

//TcpClient.exe#include<stdio.h>#include <Winsock2.h>#include<WS2tcpip.h>#pragma comment(lib,"ws2_32.lib")#include<iostream>using namespace std;#include<windows.h>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.创建SocketSOCKET 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.关闭socketclosesocket(clientSocket);//7 清理版本信息WSACleanup();return -1;}cout << "服务器连接成功!" << endl;//5.通信char buff[1024];while (1) {cin >> buff;//用户输入信息send(clientSocket, buff, strlen(buff), NULL);//发送信息}//6.关闭socketclosesocket(clientSocket);//7.清理协议版本信息WSACleanup();while (1);//停顿return 0;}

运行效果:

C++如何实现即时通信

到此,相信大家对“C++如何实现即时通信”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯