用C/C++写一个客户端和服务器之间进行TCP通信的DEMO

目录

一、Visual Sudio 2022

二、配置

三、说明

四、客户端

五、服务端

六、演示


一、Visual Sudio 2022

Visual Studio 2022是微软公司推出的一款集成开发环境(IDE),旨在为开发人员提供全面的工具集,支持从Windows到MacOS、iOS和Android等多个平台的开发。

  1. 跨平台支持:Visual Studio 2022支持.NET MAUI(Multi-platform App UI),这是一个跨平台的UI框架,允许开发者使用C#和XAML为Windows、Android、MacOS以及iOS等平台创建统一的客户端应用。此外,ASP.NET Blazor Web技术也支持通过.NET MAUI编写桌面应用程序。

  2. C++支持:Visual Studio 2022为C++工作负载提供了强大的支持,包括新的生产功能、C++ 20工具和IntelliSense,显著简化了大型代码库的管理流程,并改进了诊断功能,使得调试更易于进行。

  3. 实时协作:通过Live Share功能,开发人员可以实时共享编码会话,加快团队的编辑和调试周期。Live Share还引入了集成文本聊天功能,方便团队成员之间的沟通。

  4. AI支持:Visual Studio 2022集成了AI IntelliCode引擎,能够无缝预测开发人员的下一步操作,提高开发效率。此外,AI还支持代码完成功能,帮助开发人员更快地编写代码。

  5. 部署和测试:Visual Studio 2022简化了Azure部署流程,提供了针对常见应用程序类型的模板和本地仿真器所需的依赖项预配功能。它还支持在Windows、Linux和MacOS上进行测试,确保应用在所有平台上都能正常运行。

  6. 性能优化:Visual Studio 2022是一个64位应用程序,能够处理任何大小和复杂性的项目,而不会出现内存不足的情况。它还专注于改善搜索、Git工具和其他重要功能的性能,提高开发人员的效率。

  7. 安全性:Visual Studio 2022通过提供访问控制和自定义编辑器设置等个性化会话,确保代码的一致性和安全性。

二、配置

打开visual studio 2022的属性页面

将SDL检查设置为否 。

三、说明

将客户端与服务端分别实现,打开服务端后,进入等待连接状态,打开客户端连接成功后,提示输入信息,当输入"playmusic"后,服务器端响应播放mp3文件(自己找一个mp3文件,放到debug路径下,与exe文件在同一目录下),关闭客户端后服务器端停止工作。

四、客户端

#include<iostream>
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main()
{// 开启网络权限WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);// 创建socketSOCKET client_socket = socket(AF_INET, SOCK_STREAM, 0);if (client_socket == -1) {cout << "client socket create failed !!! Error Code: " << GetLastError() << endl;exit(-1);}// 创建目标IP和端口struct sockaddr_in target;target.sin_family = AF_INET;target.sin_port = htons(8080);target.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");// 直接连接if (connect(client_socket, (struct sockaddr*)&target, sizeof(struct sockaddr)) == -1){cout << "connect server failed !!!  Error Code:" << GetLastError() << endl;}// 发消息while (true) {char buff[BUFSIZ * 4] = { 0 };cout << "please input send content:" << endl;cin >> buff;int ret = send(client_socket, buff, strlen(buff), 0);if (ret <= 0)break; }return 0;
}

五、服务端

#include<iostream>
#include<stdio.h>
// winsock  widows自带的
#include<WinSock2.h>// Windows 网络通讯头文件
// 一个库文件 (windows 不开源)
#pragma comment(lib,"ws2_32.lib")// 媒体库
#include<mmsystem.h>
#pragma comment (lib,"winmm.lib")using namespace std;
int main()
{// 开启网络WSADATA wsaData;WSAStartup(MAKEWORD(2, 2), &wsaData);// TCP协议,流式协议,三次握手和四次挥手// socket套接字 IPV4/IPV6 IP TCP UDP RAW// socket( // int af,    // 协议地址族  IPV4/IPV6  AF_INET/AF_INET6// int type,   // 协议类型  TCP UDP RAW  / SOCK_STREAM SOCK_DGRAM  SOCK_RAW // int protocol // 保护方式// );SOCKET server_socket = socket(AF_INET, SOCK_STREAM, 0);if (server_socket == -1) {cout << "server socket create failed !!!  Error Code:" << GetLastError << endl;exit(-1);}/*typedef struct sockaddr_in {unsigned short sin_family;  // 协议地址族unsigned short sin_port;    //  端口号  5000+  8080 9090 // htons() // 小端序转换成大端序IN_ADDR sin_addr;			// 网卡 --> 硬件网卡  WIFI  蓝牙  虚拟网卡  0.0.0.0  表示全部都检测 // 127.0.0.1 192.168.0.100// inet_addr()  // 将点分十进制的IP地址转换成整数CHAR sin_zero[8];			// 保留位置,可能之后会用到的
} SOCKADDR_IN, *PSOCKADDR_IN;*/struct sockaddr_in local;local.sin_family = AF_INET;local.sin_port = htons(8080); // htons 返回的是是unsigned shortlocal.sin_addr.S_un.S_addr = inet_addr("0.0.0.0");// 绑定socket和端口if (bind(server_socket, (struct sockaddr*)&local, sizeof(struct sockaddr_in)) == -1){cout<<"bind server socket failed !!!  Error Code:"<<GetLastError()<<endl;exit(-1);}// 监听端口if (listen(server_socket, 10) == -1){cout << "listen server socket failed !!!  Error Code:" << GetLastError() << endl;exit(-1);}cout << "bind and listen success. wait client connect ..." << endl; // 等待客户端的连接 accept在进行的过程中 就是三次握手// accept是一个阻塞函数SOCKET client_socket = accept(server_socket, NULL, NULL);while (true){char buff[BUFSIZ * 4] = { 0 };// 接收数据int ret = recv(client_socket, buff, BUFSIZ * 4, 0);// recv 返回值为-1 表示出错了// recv 返回值为0 表示正常断开// recv 返回值为正数 表示接收到了多少数据if (ret <= 0) {break;}cout << "接收到多少数据:" << ret << endl;cout << "接收到的数据:" << buff << endl;if (memcmp(buff, "playmusic", strlen("playmusic")) == 0) {mciSendString(TEXT("open Back_To_Me-Vanotek-44303614.mp3"), NULL, 0, NULL);mciSendString(TEXT("play Back_To_Me-Vanotek-44303614.mp3"), NULL, 0, NULL);}}return 0;
}

六、演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/363783.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源大模型RAG企业本地知识库问答机器人-ChatWiki

ChatWiki ChatWiki是一款开源的知识库 AI 问答系统。系统基于大语言模型&#xff08;LLM &#xff09;和检索增强生成&#xff08;RAG&#xff09;技术构建&#xff0c;提供开箱即用的数据处理、模型调用等能力&#xff0c;可以帮助企业快速搭建自己的知识库 AI 问答系统。 开…

LeetCode刷题之HOT100之数组中的第K个最大元素

2024 6/29 今天天气很好啊&#xff0c;想爬山&#xff0c;奈何下午还有最后的一个汇报。做个题先 1、题目描述 2、算法分析 看到这个题我想到的就是: public int findKthLargest(int[] nums, int k) {Arrays.sort(nums);return nums[nums.length - k ];}哈哈&#xff0c;我提…

从零开始:Spring Boot 中使用 Drools 规则引擎的完整指南

规则引擎作用 规则引擎主要用于将业务逻辑从应用程序代码中分离出来&#xff0c;提高系统的灵活性和可维护性。规则引擎通过预定义的规则来处理输入数据并做出相应的决策&#xff0c;从而实现业务逻辑的自动化和动态调整。 例如 门店信息校验&#xff1a;美团点评在门店信息…

Websocket在Java中的实践——握手拦截器

大纲 依赖握手拦截器消息处理测试参考资料 在《Websocket在Java中的实践——最小可行案例》一文中&#xff0c;我们看到如何用最简单的方式实现Websocket通信。本文中&#xff0c;我们将介绍如何在握手前后进行干涉&#xff0c;以定制一些特殊需求。 在《Websocket在Java中的实…

.net 项目中配置 Swagger

一、前言 二、Swagger 三、.net 项目中添加Swagger 1、准备工作 &#xff08;1&#xff09;.net项目 &#xff08;2&#xff09;SwaggerController &#xff08;3&#xff09;XML文档注释 2、安装Swagger包 3、 添加配置swagger中间件 &#xff08;1&#xff09;添加S…

Dijkstra算法C代码

一个带权图n个点m条边&#xff0c;求起点到终点的最短距离 先定义一个邻接矩阵graph&#xff0c;graph[i][j]表示从i到j的距离&#xff0c;i到j没有路就表示为无穷 然后定义一个visit数组&#xff0c;visit[i]表示i结点是否被访问 然后定义一个dist数组&#xff0c;dist[i]表…

计算机等级考试二级Java-第二篇:基本数据类型

1.运算符的优先级以及复杂表达式 优先级运算符结合性1( ) [ ]  .从左到右2!  ~    –从右到左3*  /  %从左到右4  -从左到右5<<  >>  >>>从左到右6<  <  >  >  instanceof从左到右7  !从左到右8&从左到右9^从左到右10|从…

常微分方程算法之编程示例四(龙格-库塔法)

目录 一、算例一 1.1 研究问题 1.2 C++代码 1.3 计算结果 二、算例二 2.1 研究问题 2.2 C++代码 2.3 计算结果 一、算例一 本节我们采用龙格-库塔法(Runge-Kutta法)求解算例。 龙格-库塔法的原理及推导请参考: 常微分方程算法之龙格-库塔法(Runge-Kutta法)…

「51媒体」浙江地区媒体邀约

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 浙江地区的媒体邀约资源丰富多样&#xff0c;涵盖了电视台…

EXCEL 复制后转置粘贴

nodepad 转置参考&#xff1a; https://editor.csdn.net/md/?articleId140014651 1. WPS复制后转置粘贴 复制-》右键-》顶部第一行-》粘贴行列转置&#xff0c;如下图&#xff1a; 2. Excel office365 本地版 2. Excel office365 在线版

Shell编程之正则表达式与文本处理器

正则表达式 正则表达式概述 1. 正则表达式的定义 正则表达式又称正规表达式、常规表达式。在代码中常简写为regex 、regexp 或 RE 。 正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串&#xff0c;简单来说&#xff0c;是一种匹配字符串的方法&…

Linux操作系统--软件包管理(保姆级教程)

RPM软件包的管理 大多数linux的发行版本都是某种打包系统。软件包可以用来发布应用软件&#xff0c;有时还可以发布配置文件。他们比传统结构的.tar和.gz存档文件有几个优势。如它们能让安装过程尽可能成为不可分割的原子操作。 软件包的安装程序会备份它们改动过的文件。如果…

华为昇腾NPU实战:LLM ChatGLM2模型推理体验

参考&#xff1a;https://gitee.com/mindspore/mindformers/blob/dev/docs/model_cards/glm2.md#chatglm2-6b 1、安装环境&#xff1a; 昇腾NPU卡对应英伟达GPU卡&#xff0c;CANN对应CUDA底层&#xff1b; mindspore对应pytorch&#xff1b;mindformers对应transformers 本…

【笔记】Spring Cloud Gateway 实现 gRPC 代理

Spring Cloud Gateway 在 3.1.x 版本中增加了针对 gRPC 的网关代理功能支持,本片文章描述一下如何实现相关支持.本文主要基于 Spring Cloud Gateway 的 官方文档 进行一个实践练习。有兴趣的可以翻看官方文档。 由于 Grpc 是基于 HTTP2 协议进行传输的&#xff0c;因此 Srping …

新手教程系列 -- SQLAlchemy对同一张表联表两次

在开发过程中&#xff0c;我们经常会遇到对同一张表进行多次联表查询的需求。比如在查询航线时&#xff0c;我们希望将起飞和降落的机场名称代入结果中。为了实现这一目标&#xff0c;机场名称统一存放在 AirPort 表中。下面&#xff0c;我们将介绍如何通过 SQLAlchemy 实现这一…

财务RPA与数字化转型——财务RPA如何促进企业的数字化转型

在数字化时代&#xff0c;企业面临着推动创新、提高效率的巨大挑战。RPA财务机器人作为智慧财务不可或缺的新动能&#xff0c;不仅能够优化财务流程&#xff0c;还能够在整个企业中引领数字化变革。本文金智维将深入探讨财务RPA如何成为企业数字化转型的战略利器&#xff0c;为…

visual studio 2022配置和使用jsoncpp

下载 jsoncpp下载位置&#xff1a; GitHub - open-source-parsers/jsoncpp: A C library for interacting with JSON. 编译库 1、下载完成之后解压 2、在解压文件的makefiles文件下有个vs71&#xff0c;在vs71中有visual studio项目&#xff0c;不过这里的项目是visual stud…

-bash: /snap/bin/docker: 没有那个文件或目录

-bash: /snap/bin/docker: 没有那个文件或目录 解决办法 export PATH$PATH:/usr/bin/docker然后&#xff0c;重新加载配置文件 source ~/.bashrc

AI是如何与快充技术结合的?

针对AI技术在快充领域的运用&#xff0c;我们可以进一步深入探讨AI如何与快充技术结合&#xff0c;提升充电效率和用户体验。以下是一些具体的AI技术在快充领域的应用场景&#xff1a; 一、智能充电算法 学习充电模式&#xff1a;AI算法可以学习用户的充电习惯&#xff0c;比…

浅谈API生态建设:API安全策略的6项原则

API作为连接系统与应用的桥梁&#xff0c;在助力实现高效业务流程的同时&#xff0c;也不可避免出现资产管理困难、敏感数据泄漏风险骤增等安全问题。前段时间&#xff0c;安全公司Fastly公布了一项重磅调查报告&#xff0c;报告中显示95%的企业在过去1年中遭遇过API安全问题。…