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

news2024/10/7 20:25:49

目录

一、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);

	// 创建socket
	SOCKET 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 short
	local.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.coloradmin.cn/o/1875963.html

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

相关文章

技术驱动的音乐变革:AI带来的产业重塑

&#x1f4d1;引言 近一个月来&#xff0c;随着几款音乐大模型的轮番上线&#xff0c;AI在音乐产业的角色迅速扩大。这些模型不仅将音乐创作的门槛降至前所未有的低点&#xff0c;还引发了一场关于AI是否会彻底颠覆音乐行业的激烈讨论。从初期的兴奋到现在的理性审视&#xff0…

详解ApplicationRunner和CommandLineRunner

一、前言 springBoot框架项目&#xff0c;有时候有预加载数据需求——提前加载到缓存中或类的属性中&#xff0c;并且希望执行操作的时间是在容器启动末尾时间执行操作。比如笔者工作中遇到了一个预加载redis中的缓存数据&#xff0c;加载为java对象。针对这种场景&#xff0c…

自组装mid360便捷化bag包采集设备

一、问题一&#xff1a;电脑太重&#xff0c;换nuc 采集mid360数据的过程中&#xff0c;发现了头疼的问题&#xff0c;得一手拿着电脑&#xff0c;一手拿着mid360来采集&#xff0c;实在是累胳膊。因此&#xff0c;网购了一个intel nuc, 具体型号是12wshi5000华尔街峡谷nuc12i…

PyTorch(五)自动微分

#c 概述 文档概述 涉及到的知识点讲解&#xff1a;「自动微分」&#xff0c;「梯度」&#xff0c;「权重」&#xff0c;「偏置」&#xff0c;「反向传播」&#xff0c;「计算图」。 主要讲解了「自动微分」与「梯度计算」&#xff0c;「计算图」之间的概念关系。 1 基本概念…

网页如何快速被收录?

其实就是要要吸引搜索引擎爬虫更快地抓取你的网页&#xff0c;想让爬虫爬取网页&#xff0c;首要做的自然是创建并提交站点地图。站点地图是搜索引擎了解你网站结构的重要工具。它可以帮助爬虫更快地发现和抓取你网站上的所有重要页面。通过Google Search Console提交站点地图&…

【Linux】生物信息学常用基本命令

wget网址用于直接从网上下载某个文件到服务器&#xff0c;当然也可以直接从网上先把东西下到本地然后用filezilla这个软件来传输到服务器上。 当遇到不会的命令时候&#xff0c;可以使用man “不会的命令”来查看这个命令的详细信息。比如我想要看看ls这个命令的详细用法&…

【Sklearn-驯化】sklearn中决策树cart的用法,看这篇就够了

【Sklearn-驯化】sklearn中决策树cart的用法&#xff0c;看这篇就够了 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档…

仓库管理系统17--客户管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、添加用户控件 <UserControl x:Class"West.StoreMgr.View.CustomerView"xmlns"http://schemas.microsof…

信息安全前沿技术有哪些?

目前信息安全领域&#xff08;不限于技术层面&#xff09;有哪些前沿的研究方向&#xff0c;代表人物有哪些&#xff1f;有哪些新的研究成果&#xff1f;以及从哪些地方可以获得这些咨询&#xff1f; 我在做 system 方向的安全研究&#xff0c;最近发现其实中美两国都在 TEE (…

洞察数据资产的奥秘:深入剖析数据资产在企业运营中的核心作用,提出一套全面、系统的数据资产解决方案,帮助企业实现数据资产的最大化利用和增值

一、引言 在数字化浪潮汹涌的今天&#xff0c;数据已成为企业最宝贵的资产之一。数据资产不仅记录了企业的历史运营轨迹&#xff0c;更蕴含着指导未来决策的智慧。然而&#xff0c;如何有效管理、利用这些数据资产&#xff0c;使其转化为企业的竞争优势和利润增长点&#xff0…

【ArcGIS 脚本工具】拯救密恐,隐藏唯一值渲染图层的标记符号

最近拿到了【Hello 图狗】制作的三调/变更样式符号库&#xff0c;确实比之前网上下载的版本好用很多。 ArcGIS Pro三调23变更符号库V1.02&#xff08;汇总&#xff09;_中大比例尺.stylx和样式属性对调 不过使用过程中触发了一个旧病&#xff0c;就是匹配样式之后&#xff0c;…

网络配置(IP、NETMASK、GATEWAY、DNS、DHCP) <持续更新中>

参考&#xff1a; 初学Linux之网络配置(IP、NETMASK、GATEWAY、DNS、DHCP)-CSDN博客【学习笔记】网关 & 路由_网关和路由-CSDN博客【学习笔记】计算机网络 IP地址与MAC地址_根据mac分配ip-CSDN博客【学习笔记】TCP 和 UDP 协议_tcp 发送 syn 应答没有syn ack-CSDN博客 一…

若依 ruoyi 分离版 vue 简单的行内编辑实现

需要实现的效果&#xff1a;双击文本 - 修改文本 - 保存修改。 原码&#xff1a;仅文本显示文字内容 <el-table-column label"商品" align"center" prop"goodsName" width"200" v-if"columns[1].visible" /> 实现…

小程序web-view无法打开该页面的解决方法

问题&#xff1a;开发者工具可以正常打开&#xff0c;正式上线版小程序使用 web-view 组件测试时提示&#xff1a;“无法打开该页面&#xff0c;不支持打开 https://xxxxxx&#xff0c;请在“小程序右上角更多->反馈与投诉”中和开发者反馈。” 解决方法&#xff1a;需要配…

Altium Designer的元件库 PCB库 3D库神器

元件库 PCB库 3D库神器 对于硬件工程师来说贸泽是一个器件选型相当方便的电子商城,虽然购买元器件比立创商城要慢和贵,但是,上面的物料种类、选型的便捷性要远远好于立创商城;而且,它上面的大多数元件都有自己的元件封装、PCB封装、3D模型,这就对实际的开发节省了好多绘…

Java | Leetcode Java题解之第191题位1的个数

题目&#xff1a; 题解&#xff1a; public class Solution {public int hammingWeight(int n) {int ret 0;while (n ! 0) {n & n - 1;ret;}return ret;} }

52、基于K 均值聚类实现基于颜色的分割(matlab)

1、K 均值聚类实现基于颜色的分割原理及流程 K 均值聚类是一种常用的聚类算法&#xff0c;通过将数据点分配到 K 个簇中&#xff0c;每个簇的中心代表簇的平均值来实现聚类的目的。 基于颜色的分割的原理是利用像素的颜色信息来对图像进行分割。首先需要将图像的每个像素点表…

如何用CSS样式实现一个优雅的渐变效果?

CSS渐变效果 CSS渐变&#xff08;Gradients&#xff09;是一种让两种或多种颜色平滑过渡的视觉效果&#xff0c;广泛应用于网页背景、按钮、边框等&#xff0c;以创造丰富的视觉体验。CSS提供了线性渐变&#xff08;Linear Gradients&#xff09;和径向渐变&#xff08;Radial…

性能之巅的巴比达内网穿透访问单位的web管理系统

在这个数字化飞速发展的时代&#xff0c;作为一名IT部门的小主管&#xff0c;我经常面临着一项挑战&#xff1a;如何在外网环境下高效、安全地访问我们单位内部部署的Web管理系统。这不仅仅是关乎我个人的工作效率&#xff0c;更是影响到整个团队能否快速响应市场需求的关键。直…

GPT-4o首次引入!全新图像自动评估基准发布!

目录 01 什么是DreamBench&#xff1f; 02 与人类对齐的自动化评估 03 更全面的个性化数据集 04 实验结果 面对层出不穷的个性化图像生成技术&#xff0c;一个新问题摆在眼前&#xff1a;缺乏统一标准来衡量这些生成的图片是否符合人们的喜好。 对此&#xff0c;来自清华大…