TCP/UDP实现网络通信

news2024/11/14 17:13:49

TCP实现网络通信

1.服务端

#include<myhead.h>

//1服务端定义:端口号\id号
#define SER_PIPR 6666
#define SER_IP "196.168.111.186"   //通过ifconfig查看ip
int main(int argc, const char *argv[])
{
	//1创建套接字
	int sfd =socket(AF_INET,SOCK_STREAM,0);
	if(sfd==-1)
	{
		perror("socket error");
		return -1;
	}

	//2.将端口号快速重用
	int reuse=1;
	if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))==-1)
	{
		perror("setsockipt error");
		return -1;
	}

	//2为套接字绑定端口号和ip
	//2.1填充地址结构体
	struct sockaddr_in sin;
	sin.sin_family=AF_INET;   //通信域名
	sin.sin_port=htons(SER_PIPR);  //端口号
	sin.sin_addr.s_addr=inet_addr(SER_IP);  //IP地址

	//2.2绑定工作
	if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
	{
		perror("bind error");
		return -1;
	}

	//3.将套接字设置成被动监听状态
	
	if(listen(sfd,128)==-1)
	{
		perror("listen error");
		return -1;
	}

	//4.阻塞等待客户的连接请求
	//4.1定义勇于接收客户端的信息
	struct sockaddr_in cin;//用于接收地址信息
	socklen_t addrlen = sizeof(cin);  //用于接收长度

	//4.2接收连接
	int newfd= accept(sfd,(struct sockaddr*)&cin,&addrlen);
	if(newfd==-1)
	{
		perror("accept error");
		return -1;
	}
	printf("[%s:%d]:已成功连接一个客户端\n",
			inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));

	//5.数据的收发
	char buf[128]="";
	while(1)
	{
		//清空容器
		bzero(buf,sizeof(buf));

		//从可读端读取信息
		int res=recv(newfd,buf,sizeof(buf),0);
		if(res==-1)
		{
			perror("recv error");
			return -1;
		}
		else if(res == 0)
		{
			printf("客户端已经下线\n");
			close(newfd);
			break;
		}
		printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);

		//对收到的消息进行一顿操作
		strcat(buf,"*_*");

		//将消息回复给客户端
		if(send(newfd,buf,strlen(buf),0)==-1)
		{
			perror("发送error");
			return -1;
		}
		printf("发送成功\n");


	}

	//关闭监听
	close(sfd);
	
	return 0;
}

2.客户端

     1	#include<myhead.h>
     2	#define SER_PORT  6666 //与服务器保持一致
     3	#define SER_IP    "192.168.111.186"   //服务器ip地址
     4	
     5	#define CLI_PORT   8888  //客户端端口号
     6	#define CLI_IP    "192.168.111.186"    //客户端ip地址
     7	int main(int argc, const char *argv[])
     8	{
     9		//1.创建用于通信的套接字文件描述符
    10		int cfd=socket(AF_INET,SOCK_STREAM,0);
    11		if(cfd==-1)
    12		{
    13			perror("socket error");
    14			return -1;
    15		}
    16		printf("cfd = %d",cfd);
    17		//2.绑定ip地址和端口号
    18		//2.1填充地址信息结构体
    19		struct sockaddr_in cin;
    20		cin.sin_family = AF_INET;  //通信域
    21		cin.sin_port = htons(CLI_PORT); //端口号
    22		cin.sin_addr.s_addr = inet_addr(CLI_IP);   //ip地址
    23	
    24		//2.2绑定工作
    25		if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)
    26		{
    27			perror("bind error");
    28			return -1;
    29		}
    30		printf("bind success\n");
    31		
    32		//3.连接到服务器
    33		//3.1填充服务器地址信息结构体
    34		struct sockaddr_in sin;
    35		sin.sin_family=AF_INET;  //服务器的通信域
    36		sin.sin_port= htons(SER_PORT); //服务器端口号
    37		sin.sin_addr.s_addr=inet_addr(SER_IP);   //服务器ip地址
    38	
    39		//3.2连接服务器
    40		if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
    41		{
    42			perror("connect error");
    43			return -1;
    44		}
    45		printf("连接服务器成功\n");
    46		//4.数据收发
    47		char buf[128]="";
    48		while(1)
    49		{
    50			printf("请输入>>>");
    51			fgets(buf,sizeof(buf),stdin);  //从终端获取字符串
    52			buf[strlen(buf)-1]=0;
    53	
    54			//将数据发送给服务器
    55			send(cfd,buf,strlen(buf),0);
    56			printf("发送成功\n");
    57	
    58			//清空容器
    59			bzero(buf,sizeof(buf));
    60	
    61			//接受服务器发来的的数据
    62			recv(cfd,buf,sizeof(buf),0);
    63	
    64			printf("收到服务器消息为:%s\n",buf);
    65	
    66		}
    67	
    68		//5.关闭套接字
    69		close(cfd);
    70		
    71		return 0;
    72	}

UDP实现网路通信

1.服务端

     1	#include<myhead.h>
     2	#define SER_PORT 9999  //服务器端口号
     3	#define SER_IP "192.168.111.186"  //服务器ip地址
     4	int main(int argc, const char *argv[])
     5	{
     6		//创建用于通信的服务器套接字描述符
     7		int sfd = socket(AF_INET,SOCK_DGRAM,0);
     8		if(sfd==-1)
     9		{
    10			perror("socket error");
    11			return -1;
    12		}
    13	
    14		printf("sfd = %d\n",sfd);
    15	
    16		//将端口号快速重用
    17		int resuse = 1;
    18		if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&resuse,sizeof(resuse))==-1)
    19		{
    20			perror("setsockopt error");
    21			return -1;
    22		}
    23	
    24		printf("将端口号快速重用成功\n");
    25	
    26		//2.绑定ip地址和端口号
    27		//2.1填充地址信息结构体
    28		struct sockaddr_in sin;
    29		sin.sin_family = AF_INET;   //通信域
    30		sin.sin_port = htons(SER_PORT);   //端口号
    31		sin.sin_addr.s_addr = inet_addr(SER_IP);  //IP地址
    32		//2.2绑定工作
    33		if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)
    34		{
    35			perror("bind error");
    36			return -1;
    37		}
    38	
    39		//3.数据收发
    40		char buf[128]="";
    41		struct sockaddr_in cin;             //接受对端地址信息
    42		socklen_t addrlen = sizeof(cin);     //接收地址长度
    43		while(1)
    44		{
    45			//清空容器
    46			bzero(buf,sizeof(buf));
    47	
    48			//从套接字中读取数据
    49			recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen);
    50			printf("收到的消息为:%s\n",buf);
    51	
    52			//收到的消息进行处理
    53			strcat(buf,"*_*");
    54	
    55			if(sendto(sfd,buf,strlen(buf),0,(struct sockaddr*)&cin,sizeof(cin))==-1)
    56			{
    57				perror("发送error");
    58				return -1;
    59			}
    60			printf("发送成功\n");
    61		}
    62		//4.关闭文件描述符
    63	
    64		return 0;
    65	}

2.客户端

思维导图:

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

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

相关文章

AI绘画大模型-StableDiffusion最强模型sd3(本地安装方法)

​ 前言/introduction Stable Diffusion 3&#xff08;简称SD3&#xff09;是Stability AI最新推出的文本到图像生成模型。相比前代模型&#xff0c;SD3在生成质量、细节表现以及运行效率上有了显著提升&#xff0c;尤其在细腻的图像渲染和复杂的场景构建方面表现出色。SD3模型…

旅游展示系统2024(代码+论文+ppt)

旅游展示系统2024(代码论文ppt),编号:sp013 代码经过修正,确保可以运行,下载地址在文末 技术栈: springbottvuemysql 展示: 下载地址: https://download.csdn.net/download/hhtt19820919/89642334 备注: 专业承接各种程序java,c,c,python,cuda,AI 运行有问题请私信我,私…

深兰科技创始人陈海波入选“2024先锋科创家?硬科技商业先锋榜”

8月14日&#xff0c;2024先锋科创家系列榜单揭晓&#xff0c;深兰科技创始人、董事长陈海波先生凭借创新精神和商业洞察力成功入选&#xff0c;荣登“2024先锋科创家•硬科技商业先锋榜”。 该榜单评选由财联社《科创板日报》联合上海科学技术情报研究所(ISTIS)共同发起&#x…

ImagePicker插件的用法

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何选择视频文件"相关的内容&#xff0c;本章回中将介绍如何混合选择图片和视频文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我…

网页版IntelliJ IDEA部署

在服务器部署网页 IntelliJ IDEA 引言 大家好&#xff0c;我是小阳&#xff0c;今天要为大家带来一个黑科技——如何在云端部署和使用WEB版的IntelliJ IDEA&#xff0c;让你在任何地方都可以随心所欲地进行Java开发。这个方法特别适合那些用着老旧Windows电脑&#xff0c;部署…

基于springboot的医药管理系统

TOC springboot194基于springboot的医药管理系统 绪论 1.1 选题背景 当人们发现随着生产规模的不断扩大&#xff0c;人为计算方面才是一个巨大的短板&#xff0c;所以发明了各种计算设备&#xff0c;从结绳记事&#xff0c;到算筹&#xff0c;以及算盘&#xff0c;到如今的…

系统架构设计师 - 软件工程(1)

软件工程 软件工程&#xff08;13-22分&#xff09;非常重要软件开发方法原型法【需求阶段】结构化法面向对象方法面向服务的方法其他软件开发方法 软件开发模型瀑布模型 SDLC增量与迭代螺旋模型V 模型 和喷泉模型构件组装模型 CBSD统一过程 UP敏捷方法 逆向工程需求工程需求定…

无障碍服务屏蔽_关闭无障碍服务快捷方式

问题描述&#xff1a; 1&#xff09;部分app 存在无障碍服务功能&#xff0c;需要关闭 2&#xff09;对于客户自研App&#xff0c;自己具备系统签名自己直接开启了无障碍服务并且打开了无障碍服务快捷方式&#xff0c;如何关闭无障碍服务快捷开关 文章目录 问题现象问题描述 屏…

直流电机(二)

直流电机重要参数 直流电机作为一个电磁装置&#xff0c;对于用户来说要哪些参数是他们关注的呢。• 额定功率PN&#xff1a;电机在铭牌规定的额定状态下运行时电机的输出功率(W/kW)• 额定电压UN&#xff1a;电机出线端额定电压(V )• 额定电流IN&#xff1a;电机出线额定电流…

python unittest高级特性!

1. 测试套件 (Test Suites) 测试套件允许你组合多个测试用例&#xff0c;并且能够以不同的方式组织和运行这些测试。这是对测试进行分组和控制测试执行顺序的有效手段。 import unittestclass TestStringMethods(unittest.TestCase): def test_upper(self): self.a…

C语言生成常见波形数据

最近无聊&#xff0c;研究上C语言的一些程序&#xff0c;感觉波形生成还是挺有用的 这里主要生成了正弦&#xff0c;方波&#xff0c;三角波 &#xff0c;锯齿波&#xff0c;指数波形等 首先看看效果&#xff0c; 这里把生成的数据用python画了出来&#xff0c;程序在最后 …

适合母亲节的SVG模版

宝藏模版 往期推荐&#xff08;点击阅读&#xff09;&#xff1a; 趣味效果&#xff5c;高大上&#xff5c;可爱风&#xff5c;年终总结&#xff08;一&#xff09;&#xff5c;年终总结&#xff08;二&#xff09;&#xff5c;循环特效&#xff5c;情人节&#xff08;一&…

[Datawhale AI 夏令营]多模态大模型数据合成赛事-Task2

简单按照datawhale给的task2的文档学习了一下,主要还是学习了Data-Juicer相关的知识。 1.Data-juicer 初探 简单理解一下&#xff0c;Data juicer就是提供给你许多数据处理方法&#xff0c;包括Formatter、Mapper、Filter、Deduplicator和Selector&#xff0c;涉及图像、文本、…

73、 dockerfile

一、dockerfile 自定义镜像---------通过docker创建镜像。 1.1、创建镜像的方式&#xff1a; 1、dockerfile最基的方式&#xff0c;最常用的方式。 2、docker pull 拉取的是最基础的镜像&#xff0c;只有基础功能&#xff0c;没有定制化的功能。 3、基于基础镜像&#xff…

每天五分钟计算机视觉:人脸识别如何解决一次学习的问题?

本文重点 人脸识别技术作为当前计算机技术的重要分支,广泛应用于公共安全、智能家居、金融商业等多个领域。然而,尽管该技术取得了显著进展,但在实际应用中仍面临诸多挑战,其中一次学习问题(One-Shot Learning Problem)尤为突出。 一次学习问题的定义 我们人类是具有快…

单元训练01:LED指示灯的基本控制

蓝桥杯 小蜜蜂 单元训练01&#xff1a;LED指示灯的基本控制 #include "stc15f2k60s2.h" #include <intrins.h>#define LED(x) \{ \P2 P2 & 0x1f | 0x80; \P0 x; \P2 & 0x1f; \}…

用Python实现9大回归算法详解——04. 多项式回归算法

多项式回归 是线性回归的一种扩展&#xff0c;它通过将输入特征的多项式项&#xff08;如平方、立方等&#xff09;引入模型中&#xff0c;以捕捉数据中非线性的关系。虽然多项式回归属于线性模型的范畴&#xff0c;但它通过增加特征的多项式形式&#xff0c;使得模型能够拟合非…

python-NLP:4句法分析

文章目录 句法分析概述句法分析分类句法分析任务 句法结构分析基本概念语法形式化基本方法 依存句法分析浅层句法分析 句法分析概述 句法分析(syntacticparsing)是自然语言处理中的关键技术之一&#xff0c;其基本任务是确定句子的句法结构(syntactic structure)或句子中词汇之…

华三超融合服务器硬件监控指标解读

随着信息技术的快速发展&#xff0c;超融合服务器因其高效、灵活的特点&#xff0c;在企业IT架构中扮演着越来越重要的a角色。华三&#xff08;H3C&#xff09;作为业界知名的网络设备供应商&#xff0c;其超融合服务器产品在市场上广受欢迎。 为了确保这些服务器的稳定运行&am…

asp.net core 调用wps实现word转pdf

安装wps https://www.wps.cn/ 创建.net core控制项目 添加com引用&#xff0c;搜索wps 准备word&#xff0c;名字叫001.docx word转pdf 编写代码 namespace WPSStu01 {internal class Program{static void Main(string[] args){Console.WriteLine("转化开始&q…