Day29

news2024/11/28 5:37:52

TCP_SER

#include <myhead.h>

//定义处理错误的宏函数
#define ERR_MSG(msg) do{\
	fprintf(stderr,"line:%d   %s   %s",__LINE__, __FILE__, __func__);\
	perror(msg);\
}while(0)

//定义IP和端口号
#define IP "192.168.2.186"
#define PORT 6666

int main(int argc, const char *argv[])
{
	//1> 创建流式套接字socket

	int sfd = socket(AF_INET, SOCK_STREAM, 0);
	if(sfd < 0)
	{
		ERR_MSG("socket");
		return -1;
	}
	
	//2> 绑定服务器ip和端口bind
	//真实地址信息结构体
	struct sockaddr_in sin;
	sin.sin_family      = AF_INET;
	sin.sin_port        = htons(PORT);
	sin.sin_addr.s_addr = inet_addr(IP);
	
	if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
	{
		ERR_MSG("bind");
		return -1;
	}

	//3> 设置为被动监听状态listen
	if(listen(sfd, 128) < 0)
	{
		ERR_MSG("listen");
		return -1;
	}

	//4> 获取连接成功的套接字accept
	//获取接收的地址信息结构体
	struct sockaddr_in cin;
	socklen_t addrlen = sizeof(cin);

	int newfd = accept(sfd, (struct sockaddr*)&cin, &addrlen);
	if(newfd < 0)
	{
		ERR_MSG("accept");
		return -1;
	}
	printf("[%s:%d] 客户端连接成功 newfd = %d\n",\
			inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), newfd);

	while(1)
	{
		//5> 接收recv
		char buf[128] = "";
		//清
		bzero(buf, sizeof(buf));
		//收
		ssize_t res = recv(newfd, buf, sizeof(buf), 0);
		if(res < 0)
		{
			ERR_MSG("recv");
			return -1;
		}
		else if(res == 0)
		{
			printf("[%s:%d] 客户端下线 newfd = %d\n",\
					inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), newfd);
			break;
		}
	
		printf("[%s:%d] newfd = %d : %s\n",\
					inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), newfd, buf);
		//6> 发送send
		strcat(buf, "***");
		if(send(newfd, buf, sizeof(buf), 0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}
	}
		
	//7> 关闭
	close(newfd);
	close(sfd);	
	return 0;
}

TCP_CLI

#include <myhead.h>

//定义处理错误的宏函数
#define ERR_MSG(msg) do{\
	fprintf(stderr,"line:%d   %s   %s",__LINE__, __FILE__, __func__);\
	perror(msg);\
}while(0)

//定义IP和端口号
#define IP "192.168.2.186"
#define PORT 6666

int main(int argc, const char *argv[])
{
	//1> 创建流式套接字socket

	int cfd = socket(AF_INET, SOCK_STREAM, 0);
	if(cfd < 0)
	{
		ERR_MSG("socket");
		return -1;
	}
	
	//真实地址信息结构体
	struct sockaddr_in sin;
	sin.sin_family      = AF_INET;
	sin.sin_port        = htons(PORT);
	sin.sin_addr.s_addr = inet_addr(IP);

	//2> 连接服务器connect
	if(connect(cfd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
	{
		ERR_MSG("connect");
		return -1;
	}

	while(1)
	{
		//3> 发送send
		char buf[128] = "";
		fgets(buf, sizeof(buf), stdin);
		buf[strlen(buf) -1 ] = '\0';
		if(send(cfd, buf, sizeof(buf), 0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}

		//4> 接收recv
		//清
		bzero(buf, sizeof(buf));
		//收
		ssize_t res = recv(cfd, buf, sizeof(buf), 0);
		if(res < 0)
		{
			ERR_MSG("recv");
			return -1;
		}
		else if(res == 0)
		{
			printf("服务器下线\n");
			break;
		}
		printf("cfd = %d : %s\n", cfd, buf);
	}

	//5> 关闭
	close(cfd);	
	return 0;
}

在这里插入图片描述
UDP_SER

#include <myhead.h>

//定义处理错误的宏函数
#define ERR_MSG(msg) do{\
	fprintf(stderr,"line:%d   %s   %s",__LINE__, __FILE__, __func__);\
	perror(msg);\
}while(0)

//定义IP和端口号
#define IP "192.168.2.186"
#define PORT 6666

int main(int argc, const char *argv[])
{
	//1> 创建报式套接字
	int sfd = socket(AF_INET, SOCK_DGRAM, 0);
	if(sfd < 0)
	{
		ERR_MSG("socket");
		return -1;
	}

	//2> 绑定服务器
	//真实地址信息结构体
	struct sockaddr_in sin;
	sin.sin_family      = AF_INET;
	sin.sin_port        = htons(PORT);
	sin.sin_addr.s_addr = inet_addr(IP);

	if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
	{
		ERR_MSG("bind");
		return -1;
	}

	while(1)
	{
		char buf[128] = "";
		struct sockaddr_in cin;
		socklen_t addrlen = sizeof(cin);
		//3> 接收
		bzero(buf, sizeof(buf));
		if(recvfrom(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&cin, &addrlen) < 0)
		{
			ERR_MSG("recvfrom");
			return -1;
		}
		printf("[%s:%d] : %s\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port), buf);
	
		//4> 发送
		strcat(buf, "***");
		if(sendto(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&cin, addrlen) < 0)
		{
			ERR_MSG("sendto");
			return -1;
		}
	}

	//5> 关闭
	close(sfd);
	
	return 0;
}

UDP_CLI

#include <myhead.h>

//定义处理错误的宏函数
#define ERR_MSG(msg) do{\
	fprintf(stderr,"line:%d   %s   %s",__LINE__, __FILE__, __func__);\
	perror(msg);\
}while(0)

//定义IP和端口号
#define IP "192.168.2.186"
#define PORT 6666

int main(int argc, const char *argv[])
{
	//1> 创建报式套接字
	int sfd = socket(AF_INET, SOCK_DGRAM, 0);
	if(sfd < 0)
	{
		ERR_MSG("socket");
		return -1;
	}

	//2> 绑定服务器
	//真实地址信息结构体
	struct sockaddr_in sin;
	sin.sin_family      = AF_INET;       
	sin.sin_port        = htons(PORT);    
	sin.sin_addr.s_addr = inet_addr(IP); 

	while(1)
	{
		char buf[128] = "";
		socklen_t addrlen = sizeof(sin);
		//3> 发送
		fgets(buf, sizeof(buf), stdin);
		buf[strlen(buf)-1] = '\0';

		if(sendto(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&sin, addrlen) < 0)
		{
			ERR_MSG("send");
			return -1;
		}

		bzero(buf, sizeof(buf));
		//4> 接收
		if(recvfrom(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&sin, &addrlen) < 0)
		{
			ERR_MSG("recv");
			return -1;
		}
		printf("[%s:%d] : %s\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), buf);
	}	


	//5> 关闭
	close(sfd);
	return 0;
}

在这里插入图片描述

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

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

相关文章

数组的定义方式及访问

问题 如何创建及访问数组。 方法 了解数组的概念 数组就是存储多个数据的容器&#xff0c;数组的长度固定&#xff0c;多个数据的数据类型要一致。 数组的三种定义方式 数据存储的数据类型[] 数组名字 new 数组存储的数据类型[长度] 数据类型[] 数组名 new 数据类型[]{元素…

测试人35岁何去何从?软件测试路在何方?“我“一路升级打怪...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试员干到35岁&a…

暑期健身房招生活动文案分享,在线传单设计

想要有效地宣传健身房的信息&#xff0c;还能够吸引学员了解报名的宣传单要怎么制作&#xff1f;不用自己动手设计&#xff0c;借助在线模板和在线设计工具&#xff0c;一键就能生成专属的招生传单。以下是在线招生传单设计教程和传单设计模板使用教程。 首先找到一个在线设计工…

Juypter更改默认路径,并且解决改完默认路径不自动跳转的问题

目录 更改默认路径 第一步先在你所安装的juypter的环境下输入下面代码 第二步在自己的文件夹下找到这个目录&#xff0c;用记事本打开 第三步更改快捷方式 解决浏览器不调转方法 相对于juypter来讲&#xff0c;还是挺好用的&#xff0c;自我感觉比pycharm更好一点。 juypt…

ES6中 Promise和使用场景

介绍 &#x1f959;&#x1f959;&#x1f959;更加合理和更加强大 Promise&#xff0c;译为承诺&#xff0c;是异步编程的一种解决方案&#xff0c;比传统的解决方案&#xff08;回调函数&#xff09;更加合理和更加强大 在以往我们如果处理多层异步操作&#xff0c;我们往往…

群晖服务器被encrypted勒索病毒攻击后的表现与如何解密勒索病毒

群晖服务器是一种高效的数据管理方案&#xff0c;但是如果被Encrypted勒索病毒感染&#xff0c;可能会导致许多重要的数据会丢失。Encrypted勒索病毒将加密被感染服务器上的文件&#xff0c;导致它们无法打开。一旦我们遭到encrypted勒索病毒攻击&#xff0c;建议大家选择专业的…

【Web开发技术】异常处理机制的使用

文章目录 一、引言1、应用场景2、语法3、体系 二、详细设计&#xff08;后端开发&#xff09;1、信息提示常量类2、自定义异常3、Model层4、Controller层5、View层 一、引言 编程也有很久的时间了&#xff0c;如果每个报的错误和寻找的答案写成一张纸&#xff0c;叠加起来也得有…

JAVA项目代码几乎没有改动,重新发布后突然报错,无法启动

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; JAVA项目代码几乎没有改动&#xff0c;重新发布后突然报错&#xff0c;无法启动 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; JAVA项目代码几乎没有改动&#xff0c;重新发布后…

2023年PMP 续证的费用和流程最全介绍

PMP证书并不是终身有效的&#xff0c;是需要三年一续的&#xff0c;PMI会在有效期截止前给持证者发邮件提示换证&#xff08;续证&#xff09;。目前的续证费用为150美金和积满60个PDU&#xff0c;60个PDU是在证书三年有效期内积满就可以&#xff0c;像我的培训机构艾威每周都会…

当Mysql缓慢时,这几招可解燃眉之急

第一步定位问题源&#xff1a; 常见的以查询Mysql性能问题的方法 1.大部分的性能问题都是查询过慢的问题&#xff0c;可以查询慢sql日志。 通过慢查询日志定位那些执行效率较低的SQL语句&#xff0c;用–log-slow-queries[ file_name]选项启动时&#xff0c;mysqld写一个包含所…

售后退换货客服话术

在客服的工作生涯里&#xff0c;售后退换货这种问题&#xff0c;对于我们客服来说可以说是见惯不惯了。今天小编给大家准备了一些退换货的售后回复话术&#xff0c;让大家工作起来更加高效。 一、引导退换货 1.亲&#xff0c;麻烦您收到后请先试穿&#xff0c;请一定要保持衣服…

WordPress入门版,保姆级记录

服务器里用户越近&#xff0c;访问速度越快&#xff0c;所以需要根据用户群体选择合适的服务器 国外网站&#xff1a;SiteGround国内网站&#xff1a;阿里云 bidewang.co/sg WordPress托管服务器页面&#xff0c;一般选择第二个套餐 没有域名则选择购买域名 然后填选购买信息…

007-从零搭建微服务-网关中心(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff1a;https://gitee.com/csps/mingyue 文档地址&#xff1a;https://gitee.com/csps/mingyue/wikis 新建 mingyue-gateway 在 【从零搭建微服务…

练习SpringBoot烘培坊项目

烘培坊项目 文章目录 烘培坊项目项目概述项目搭建项目关键代码实现实现首页轮播图实现注册功能实现登录功能实现图片上传稿件管理页面内容列表功能稿件管理页面修改功能稿件管理页面删除功能首页三个类型下的分类展示首页三种类型的内容展示点击查看更多进入列表页面在header里…

mysql waf绕过-WAF Bypass技巧(2)

数据库waf绕过的一些玩法 WAF Bypass技巧(0)_luozhonghua2000的博客-CSDN博客 WAF绕过-WAF Bypass技巧(1)_luozhonghua2000的博客-CSDN博客 数据库特性 第一篇: Mysql数据库特性 0x01 前言 我们经常利用一些数据库特性来进行WAF绕过。在Mysgl中,比如可以这样 位置一: 参数和…

泰坦尼克号幸存者预测

本文所有的代码及数据均存放与https://github.com/MADMAX110/Titanic 泰坦尼克号幸存者预测挑战赛是一个非常受欢迎的机器学习实践项目。这是 Kaggle.com 上最受欢迎的比赛之一。 数据中有3个文件:train.csv&#xff0c;test.csv&#xff0c;和gender_submit .csv。 train.csv包…

内存碎片:理解、应用场景和防止措施

目录 摘要1. 引言2. 内存碎片的概念3. 内存碎片的产生原因4. 应用场景4.1 应用场景一&#xff1a;长时间运行的服务器4.2 应用场景二&#xff1a;嵌入式系统 5. 预防和处理内存碎片6. 示例代码&#xff1a;生成内存碎片7. 总结 摘要 本文旨在向初学者详细介绍内存碎片的概念、…

【爬虫】4.1 Scrapy 框架爬虫简介

目录 1. Scrapy 框架介绍 2. 建立 Scrapy 项目 3. 入口函数与入口地址 4. Python 的 yield 语句 5. Scrapy 爬虫的数据类型 1. Scrapy 框架介绍 1.1 Scrapy 的安装 pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple/ 1.2 Scrapy爬虫框架结构 “52”结构&…

「HTML和CSS入门指南」table 标签详解

什么是 table 标签? 在 HTML 中,table 标签用于创建表格。使用 table 标签可以帮助您以可视化和结构化的方式呈现数据。 table 标签的基本语法 以下是 table 标签的基本语法: <table><tr><th>姓名</th><th>年龄</th><th>性别&l…

chatgpt赋能python:Python如何辨别非数字符号

Python如何辨别非数字符号 在进行数据处理或者字符串操作时&#xff0c;经常会遇到需要识别和处理非数字符号的情况&#xff0c;如何在Python中进行辨别呢&#xff1f; 什么是非数字符号 非数字符号是指数字以外的字符&#xff0c;包括但不限于以下类型&#xff1a; 字母&a…