用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.mzph.cn/bicheng/37068.shtml

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

相关文章

《Redis设计与实现》阅读总结-4

第 17 章 集群 Redis集群是Redis提供的分布式数据库方案&#xff0c;集群通过分片&#xff08;sharding&#xff09;来进行数据共享&#xff0c;并提供复制和故障转移的功能 一、命令 CLUSTER MEET命令&#xff1a;用来连接不同的开启集群支持的 Redis 节点&#xff0c;以进入…

计算机网络之体系结构

上节内容&#xff1a;数据通信原理 1.计算机网络体系结构 体系结构: 研究系统中各组成成分及其关系的一门学科。 计算机网络体系结构: 定义和描述一组用于计算机及其通信设施之间互连的标准和规范的集合&#xff0c;遵循这组规范可以很方便地实现计算机设备之间的通信。 相互…

【技术指南】稳压器(电压调节器):原理、类型及其实际用用案例

电压调节器&#xff08;稳压器&#xff09;是一种电子器件或电路&#xff0c;用于控制电路中的电压水平&#xff0c;以确保在电源电压波动或负载变化时&#xff0c;输出电压能够保持在设定的稳定水平。它们通常用于各种电子设备和电源系统中&#xff0c;以提供稳定的电压供应。…

双路视频同屏显示(拼接)-基于野火Zynq7020开发板

前情提要 米联客FDMA驱动OV5640摄像头—基于野火Zynq7020开发板 本文在此基础上&#xff0c;实现了双路视频拼接。将ov5640输出的1024600的图像数据缩放为512600&#xff0c;分两路写入ddr3&#xff0c;并且显示在1024*600的RGB屏幕中。 纯FPGA也可以按此方法实现。 总体BLOC…

Typora 2024 安装教程

本章教程&#xff0c;介绍一下如何使用Typora 最新版本1.9.4&#xff0c;仅供学习交流&#xff0c;切勿滥用。 一、下载安装包 下载地址&#xff1a;https://www.alipan.com/s/8pvKf5ns6GH 当然&#xff0c;你也可以去官网下载&#xff0c;但是官网有可能随时更新&#xff0c;该…

【Sklearn-LR驯化】一文搞懂分类基石模型-逻辑回归使用总结

【Sklearn-驯化】一文搞懂分类基石模型-逻辑回归使用总结 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&#xf…

maven 根据不同环境,走不同的实现(多种环境组合)

​ 原因&#xff1a; 线上程序同时支持人大金仓和mysql&#xff0c;且支持根据环境动态选择 java JCE 的实现方式前期已完成 springboot 从mysql 迁移人大金仓 -kingbase &#xff1a;https://blog.csdn.net/qq_26408545/article/details/137777602?spm1001.2014.3001.5502 …

dataX同步SQLserver到MySQL数据

引用datax官方描述&#xff1a; DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS…

商城积分系统的设计方案(中)-- 数模设计

一、总体设计 积分和积分渠道&#xff0c;实现积分种类和发放的动态配置&#xff0c;是设计中的关键之处。 积分订单表是不必要的&#xff0c;视具体业务需求而定。 积分账户和账户收支是核心的两个表。 后面三个表都有一个school_id&#xff0c; 其实就是租户编号&#xff…

PointMamba: A Simple State Space Model for Point Cloud Analysis

1. 论文基本信息 2. 创新点 介绍了第一个状态空间模型 PointMamba&#xff0c;将其应用与点云分析。PointMamba 表现出令人印象深刻的能力&#xff0c;包括结构简单性&#xff08;例如&#xff0c;vanilla Mamba&#xff09;、低计算成本和知识可迁移性&#xff08;例如&#…

如何将编译过的C++库迅速部署在Visual Studio新项目中

本文介绍在Visual Studio中&#xff0c;通过属性表&#xff0c;使得一个新建解决方案中的项目可以快速配置已有解决方案的项目中各类已编译好的C第三方库的方法。 例如&#xff0c;我们现有一个解决方案&#xff0c;其中的一个项目需要调用Armadillo、OpenCV等多个不同的C第三…

爆款短视频素材库有哪些?分享几个容易火的视频素材网站

当今自媒体时代&#xff0c;每位内容创作者都渴望制作出下一个爆款短视频。你是否在寻找那些能让你的视频迅速蹭热度的顶级素材库&#xff1f;本文将为你介绍几个视频素材库&#xff0c;它们或许能成为你成功的秘密武器。首先要提的&#xff0c;自然是著名的国内素材库——蛙学…

SAP PP学习笔记24 - 生产订单(制造指图)的创建

上面两章讲了生产订单的元素。 SAP PP学习笔记22 - 生产订单&#xff08;制造指图&#xff09;的元素1-CSDN博客 SAP PP学习笔记23 - 生产订单&#xff08;制造指图&#xff09;的元素2 - 决济规则(结算规则)-CSDN博客 这一章讲生产订单的创建。比如 - 生产订单的流程&#…

【课程总结】Day12:YOLO的深入了解

前言 在【课程总结】Day11&#xff08;下&#xff09;&#xff1a;YOLO的入门使用一节中&#xff0c;我们已经了解YOLO的使用方法&#xff0c;使用过程非常简单&#xff0c;训练时只需要三行代码&#xff1a;引入YOLO&#xff0c;构建模型&#xff0c;训练模型&#xff1b;预测…

SwiftUI八与UIKIT交互

代码下载 SwiftUI可以在苹果全平台上无缝兼容现有的UI框架。例如&#xff0c;可以在SwiftUI视图中嵌入UIKit视图或UIKit视图控制器&#xff0c;反过来在UIKit视图或UIKit视图控制器中也可以嵌入SwiftUI视图。 本文展示如何把landmark应用的主页混合使用UIPageViewController和…

Meta CEO 扎克伯格批评闭源AI竞争对手:称其试图“创造上帝”|TodayAI

美国社交媒体巨头Meta(Facebook母公司)的CEO马克扎克伯格&#xff08;Mark Zuckerberg&#xff09;近日在一次采访中&#xff0c;公开批评了那些他认为不够开放的AI竞争对手&#xff0c;称他们的行为就像是在“创造上帝”。扎克伯格坚定表示&#xff0c;AI技术不应该被某一家公…

SysML与MBSE的关系

SysML与MBSE的关系 对于任何基于模型的系统工程 &#xff08;MBSE&#xff09; 方法&#xff0c;推荐的最佳实践是基于模型的语言、基于模型的工具、基于模型的流程和基于模型的架构框架的协同应用&#xff0c;如下图所示 系统架构四元组 图。经过十年将SysML应用于棘手的系统…

戴尔md3400存储控制器脱机故障 电池故障处理

看了一下网上关于DELL MD系列存储故障处理的文档还是比较少的&#xff0c;最近处理了一些关于MD系列存储的问题&#xff0c;稍微整理整理就分享一下&#xff0c;各位喜欢摸索的朋友可以稍稍做些参考&#xff0c;当然如果想寻求外援的也可以快速的找到合适的人。以便安全又快捷的…

C语言基础——操作符

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言基础&#xff1b; 文章目录 前言 一、操作符的分类 二、二进制和进制转换 2.1 二进制转十进制 2.1.1 十…

零知识证明基础:数字签名

1、绪论 数字签名(Digital Signature)&#xff0c;也称电子签名&#xff0c;是指附加在某一电子文档中的一组特定的符号或代码。它利用密码技术对该电子文档进行关信息提取并进行认证形成&#xff0c;用于标识签发者的身份以及签发者对电子文档的认可&#xff0c;并能被接收者…