0723,UDP通信(聪明小辉聪明小辉),HTTP协议

我就是一个爱屋及乌的人!!!! #include "network_disk_kai.h"

昨天的epoll:    可恶抄错代码了

epoll_s.csockect         return listenfdsetsockoptsockaddr_in
bind           listenfd & serveraddr
listenepoll_create1  return epfd   //创建epoll实例epoll_event
epoll_ctl      (epfd,opt,fd-key,event-value)  //注册struct epoll_event[]       //用户态用户来存储就绪的文件描述符?结构体数组nreadywhile(1){
epoll_wait    return nready //大于0--就绪的文件描述符的数量for(int i=0;i<nready;i++){   //循环处理每一个就绪的事件fd=events_arr[i].data.fd;if(fd==listenfd)    //如果当前事件是监听套接字 listenfd,表示有新的连接请求
{----process_001;}
else{
if(events_arr[i].events & EPOLLIN)  //==  (events_arr[i]events==EPOLLIN)可读事件
{----process_002;}
if(events_arr[i].events & EPOLLOUT)   //可写事件
{----process_003;}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
}
//心情不好,剩下的算了
}
}

要监听的文件描述符都挂红黑树上??怎么过一会看不懂了

 epoll_ctl 函数是 Linux 下用于控制 epoll 实例(epoll descriptor)的函数,主要用于向 epoll 实例中添加、修改或删除需要监视的文件描述符和事件的操作。

一旦文件描述符被注册到 epoll 中,程序就可以使用 epoll_wait 函数进行事件轮询。epoll_wait 会阻塞程序,直到注册的文件描述符中有事件发生或者超时。

轮询的基本工作原理是程序反复地检查某个状态或条件是否满足,直到满足为止。这通常通过一个循环来实现,不断地查询状态并处理相应的事件或数据。

UDP通信:

一对一(抄代码):

//client.c
#include <func.h>int main()
{int clientfd=socket(AF_INET,SOCK_DGRAM,0);if(clientfd==-1){error(1,errno,"socket");}struct sockaddr_in serveraddr;memset(&serveraddr,0,sizeof(serveraddr));serveraddr.sin_family=AF_INET;serveraddr.sin_port=htons(8080);serveraddr.sin_addr.s_addr=inet_addr("192.168.235.128");socklen_t len=sizeof(serveraddr);//first const char* msg="hello server  快说:聪明小辉小辉聪明";int ret=sendto (clientfd,msg,strlen(msg),0,(const struct sockaddr*)&serveraddr,sizeof(serveraddr));printf("lst sento %d bytes\n",ret);//sencond sendret=sendto(clientfd,msg,strlen(msg),0,(const struct sockaddr*)&serveraddr,sizeof(serveraddr));printf("2nd sendto %d bytes\n",ret);//recvfromchar buff[100]={0};recvfrom(clientfd,buff,sizeof(buff),0,(struct sockaddr*)&serveraddr,&len);printf("recvform from sever :%s  \n",buff);recvfrom(clientfd,buff,sizeof(buff),0,(struct sockaddr*)&serveraddr,&len);printf("recvform from sever :%s  \n",buff);close(clientfd);return 0;
}
//server.c
#include <func.h>int main()
{int serverfd=socket(AF_INET,SOCK_DGRAM,0);if(serverfd==-1){error(1,errno,"socket");}struct sockaddr_in serveraddr;memset(&serveraddr,0,sizeof(serveraddr));serveraddr.sin_family=AF_INET;serveraddr.sin_port=htons(8080);serveraddr.sin_addr.s_addr=inet_addr("192.168.235.128");int ret=bind(serverfd,(const struct sockaddr*)&serveraddr,sizeof(serveraddr));if(ret==-1){error(1,errno,"bind");}char buff[100]={0};struct sockaddr_in clientaddr;memset(&clientaddr,0,sizeof(clientaddr));socklen_t len=sizeof(clientaddr);//接受两次消息int cnt=0;while(cnt<2){printf("before recvfrom\n");recvfrom(serverfd,buff,sizeof(buff),0,(struct sockaddr*)&clientaddr,&len);printf("recv from client %s  :%d types\n",inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port));printf("message is :%s \n\n",buff);++cnt;}const char* msg="hello client  聪明小辉聪明小辉";sendto (serverfd,msg,strlen(msg),0,(const struct sockaddr*)&clientaddr,len);sendto (serverfd,msg,strlen(msg),0,(const struct sockaddr*)&clientaddr,len);close(serverfd);return 0;
}

一对多(抄代码):

//client.c
#include <func.h>int main()
{int clientfd=socket(AF_INET,SOCK_DGRAM,0);if(clientfd==-1){error(1,errno,"socket");}struct sockaddr_in serveraddr;memset(&serveraddr,0,sizeof(serveraddr));serveraddr.sin_family=AF_INET;serveraddr.sin_port=htons(8081);serveraddr.sin_addr.s_addr=inet_addr("192.168.235.128");socklen_t len=sizeof(serveraddr);//first const char* msg="hello server  说:姐,你在干嘛";int ret=sendto (clientfd,msg,strlen(msg),0,(const struct sockaddr*)&serveraddr,sizeof(serveraddr));printf("lst sento %d bytes\n",ret);//sencond sendret=sendto(clientfd,msg,strlen(msg),0,(const struct sockaddr*)&serveraddr,sizeof(serveraddr));printf("2nd sendto %d bytes\n",ret);//recvfromchar buff[100]={0};recvfrom(clientfd,buff,sizeof(buff),0,(struct sockaddr*)&serveraddr,&len);printf("recvform from sever :%s  \n",buff);while(1);close(clientfd);return 0;
}
//server.c
#include <func.h>int main()
{int serverfd=socket(AF_INET,SOCK_DGRAM,0);if(serverfd==-1){error(1,errno,"socket");}struct sockaddr_in serveraddr;memset(&serveraddr,0,sizeof(serveraddr));serveraddr.sin_family=AF_INET;serveraddr.sin_port=htons(8081);serveraddr.sin_addr.s_addr=inet_addr("192.168.235.128");int ret=bind(serverfd,(const struct sockaddr*)&serveraddr,sizeof(serveraddr));if(ret==-1){error(1,errno,"bind");}char buff[100]={0};struct sockaddr_in clientaddr;memset(&clientaddr,0,sizeof(clientaddr));socklen_t len=sizeof(clientaddr);//UDP协议是基于数据包的协议,一次sendto可以用//一次recvfrom接受//第五个参数clientfd可能是不同的客户端传递过来的//不一定是同一个客户端喵,每调用一次都会被修改while(1){printf("before recvfrom\n");recvfrom(serverfd,buff,sizeof(buff),0,(struct sockaddr*)&clientaddr,&len);printf("recv from client %s  :%d types\n",inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port));printf("message is :%s \n\n",buff);const char* msg="hello client  聪明小辉聪明小辉";sendto (serverfd,msg,strlen(msg),0,(const struct sockaddr*)&clientaddr,len);}close(serverfd);return 0;
}

失败了喵!!!!我知道了!!!!客户端的是随机分配的我只要断开再连一次就好了!!!聪明小辉!!!!
聪明小辉!!!!
聪明小辉!!!!
聪明小辉!!!!
聪明小辉!!!!

HTTP协议:

作业:

01:使用select实现一个基于UDP的一对一即时聊天程序。
 

02:什么是HTML、CSS和Javascript?

HTML        超文本标记语言,对文档进行展示
URI/URL   对文档进行定位
HTTP        对文档进行传输

03: URI由哪些部分组成?

scheme  协议名,方案名
user information   
post        主机信息
port         
path        路径(虚拟路径,分为静态路径,动态路径
query      查询词(多个查询词之间用&连接
fragment  网页中其中一个章节,片段

04:HTTP的中文全称是什么?从全称的每个字段来说明HTTP的特点。

超文本传输协议(hyper text transfer protocol)
hyper text 超文本,不止包含文本,还包括JPG,GIF等二进制文件
transfer 传输,一个request必须对应一个response
protocol 协议,基于TCP协议
特点:CS模型,可靠,无状态(每一个HTTP请求都是独立的,不依赖于上下文),文明协议(报文头是字符串的)

05:为什么需要将HTTP协议设计成无状态的呢?

  • 简化实现和提高可靠性
  • 提高性能
  • 可扩展性好,更容易进行水平扩展
  • 适应分布式计算环境

06:HTTP协议与TCP协议的区别有哪些呢?--AI

  1. HTTP协议

    • 功能:HTTP协议是应用层协议,用于在客户端和服务器之间传输超文本文档(如HTML页面)、图像、视频、音频等数据。
    • 特点:HTTP协议是无状态的,每个请求和响应之间是独立的,服务器不会保存客户端的状态信息。
    • 传输方式:HTTP协议依赖于下层的传输协议,通常是TCP协议,也可以使用TLS/SSL进行加密(HTTPS)。
  2. TCP协议

    • 功能:TCP协议位于传输层,负责在通信的两个应用程序之间提供可靠的、面向连接的数据传输服务。
    • 特点:TCP协议提供数据传输的可靠性,通过数据确认、重传机制和流量控制来保证数据的完整性和有序性。
    • 传输方式:TCP协议提供全双工的数据传输,客户端和服务器之间可以同时发送和接收数据。

主要区别和联系:

  • 层级不同:HTTP协议位于应用层,而TCP协议位于传输层。
  • 功能不同:HTTP协议负责定义数据传输的格式和规范,而TCP协议负责确保数据传输的可靠性和顺序性。
  • 依赖关系:HTTP协议依赖于TCP协议来传输数据,因此在网络通信中,HTTP协议使用TCP作为其传输层协议之一。
  • 组合使用:HTTP协议可以通过加密层(如TLS/SSL)在TCP之上实现安全传输(HTTPS),提供加密和身份验证功能。

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

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

相关文章

Ubuntu 中默认的 root 用户密码

场景&#xff1a;想要切换root用户&#xff0c;发现得输入密码&#xff0c;以为是以前设置过然后一直尝试都是错误【认证失败】最后发现根本没设置过root用户&#xff0c;默认会随机生成root用户的密码&#x1f605; Ubuntu 中默认的 root 密码是随机的&#xff0c;即每次开机都…

用51单片机或者stm32能否开发机器人呢?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;能的。但是由于单片机和st…

MATLAB练习题——矩阵(2)

逻辑运算 a [5 0.2 0 -8 -0.7 ]&#xff0c;在进行逻辑运算时&#xff0c;a 相当于什么样的逻辑量。 相当于 a[1 1 0 1 1] 角度运算 在 sin(x)运算中&#xff0c;x 是角度还是弧度&#xff1f; 在 sin(x)运算中&#xff0c;x 是弧度&#xff0c;MATLAB 规定所有…

盘点2024年大家都在使用的AI智能写作工具

在科技发达的现在社会&#xff0c;AI已经悄悄的渗入我们生活的各种角落。不知道你有没有尝试过用ai智能写作来完成一些文章创作呢&#xff1f;这次我介绍几个可以提升效率的ai智能写作工具给你试试吧。 1.笔&#xff5c;灵AI写作 CSDN 传送门&#xff1a;https://ibiling.cn…

090、Python 写Excel文件及一些操作(使用xlwt库)

要写Excel文件&#xff0c;我们需要使用第三方库。 xlwt库是一个常用的写Excel的第三方库&#xff0c;它同时支持.xls和.xlsx。 要使用第三方库&#xff0c;首选需安装&#xff1a; pip install xlwt xlutils安装完成后&#xff0c;我们就可以引入库来进行相关操作了。 使用…

OpenAI发布GPT-4 Mini的深度分析及中国大模型的弯道超车机会

引言 在OpenAI封禁中国IP访问其API后&#xff0c;紧接着推出了GPT-4 Mini&#xff0c;这是一个引发广泛关注和讨论的新举措。此举不仅让人们质疑OpenAI的战略方向&#xff0c;更引发了对中国大模型是否能弯道超车的讨论。本文将详细分析GPT-4 Mini的特点、市场影响及中国大模型…

[rustlings]23_conversions

文章目录 from_into.rsfrom_str.rsas_ref_mut.rstry_from_into.rs from_into.rs // The From trait is used for value-to-value conversions. If From is // implemented, an implementation of Into is automatically provided. // You can read more about it in the docum…

谷粒商城实战笔记-50-51-商品分类的删除

文章目录 一&#xff0c;50-商品服务-API-三级分类-删除-逻辑删除1&#xff0c;逻辑删除的配置1.1 配置全局的逻辑删除规则&#xff08;可省略&#xff09;1.2 配置逻辑删除Bean&#xff08;可省略&#xff09;1.3 Bean相应字段上加上注解TableLogic 2&#xff0c;后台接口开发…

AI学习指南机器学习篇-t-SNE模型应用与Python实践

AI学习指南机器学习篇-t-SNE模型应用与Python实践 在机器学习领域&#xff0c;数据的可视化是非常重要的&#xff0c;因为它可以帮助我们更好地理解数据的结构和特征。而t-SNE&#xff08;t-distributed Stochastic Neighbor Embedding&#xff09;是一种非常强大的降维和可视…

星环科技推出知识库产品 AI PC时代数据交互方式变革

随着企业业务的快速发展&#xff0c;数据量呈爆炸式增长&#xff0c;有效的知识管理成为企业面临的重要问题。企业遇到的普遍问题是大量的结构化、半结构化数据存储在不同的系统中&#xff0c;需要用多种计算机语言进行检索。而大模型彻底改变了人们和数据的交互方式&#xff0…

深入解析:SPI与I2C通信协议的性能比较(内附资料)

在嵌入式系统中&#xff0c;SPI&#xff08;串行外设接口&#xff09;和I2C&#xff08;互连集成电路&#xff09;是两种广泛使用的通信协议。它们各自具有独特的性能特点和应用场景。本文将深入解析这两种通信协议&#xff0c;并在STM32微控制器上进行性能比较。 1. 引言 SP…

大数定理与中心极限定理

目录 两者的定义 大数定律 中心极限定理 关系与区别 切比雪夫大数定律、伯努利大数定律和辛钦大数定律的具体应用场景和条件是什么&#xff1f; 切比雪夫大数定律 伯努利大数定律 辛钦大数定律 应用场景&#xff1a; 条件&#xff1a; 中心极限定理在实际统计学研究…

分享:大数据信用报告查询平台哪个好?

大数据信用也就是我们常说的大数据&#xff0c;相信很多朋友对这个词都不陌生&#xff0c;特别是在银行申贷的时候&#xff0c;听过比较多&#xff0c;因为在银行做信用贷款的时候都会审查申贷人的大数据信用&#xff0c;贷前提前了解自己的大数据很有必要&#xff0c;那大数据…

【JS逆向课件:第十六课:Scrapy基础2】

ImagePipeLines的请求传参 环境安装&#xff1a;pip install Pillow USER_AGENT Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36需求&#xff1a;将图片的名称和详情页中图片的数据进行爬取&a…

基于Java+SpringMvc+Vue技术的慈善捐赠平台设计与实现(源码+LW+部署讲解)

项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑&#xff01; 软件开发环境及开发工具&#xff1a; 操作系统&#xff1a;Windows 10、Windows 7、Windows 8 开发语言&#xff1a;java 前端技术&#xff1a;JavaScript、VUE.j…

vue的this.$forceUpdate()和this.$set()

目录 this.$forceUpdate() 下面举个例子&#xff1a; 改变数组的7种方法&#xff1a; this.$set() 基本用法&#xff1a; 向对象添加属性 向数组添加属性 总的来说&#xff1a; this.$forceUpdate() 使用this.$forceUpdate()可以强制组件重新渲染。在Vue.js中&#xff0…

列举excel中调整行高列宽的五种方法

列举excel中调整行高列宽的五种方法 在Excel中调整行高列宽的方法有以下五种&#xff1a; 使用鼠标手动调整行高列宽&#xff1a;将鼠标悬停在行或列的边界上&#xff0c;光标会变成双向箭头&#xff0c;此时按住鼠标左键并拖动边界即可调整行高或列宽。 使用快捷键调整行高列…

工具(linux)

Yum 软件包管理器 介绍 yum Yum 是一个在 Red Hat 和 CentOS 等 Linux 发行版中常用的软件包管理器&#xff0c;它可以方便地进行软件包的安装、更新和删除。 安装软件包 使用 yum install 命令可以安装指定的软件包&#xff0c;例如&#xff1a; yum install package_nam…

DataLoader的使用 Pytorch

在 PyTorch 中&#xff0c;tensor.shape 返回一个包含张量各维度大小的元组。 所以&#xff0c;当你执行 print(img.shape)&#xff0c;你看到的 (3, 32, 32) 实际上是在告诉你&#xff1a; 这是一个三维张量第一维&#xff08;通道&#xff09;的大小是 3第二维&#xff08;…

“论软件测试中缺陷管理及其应用”写作框架,软考高级论文,系统架构设计师论文

原创范文 软件缺陷指的是计算机软件或程序中存在的某种破坏正常运行能力的问题、错误&#xff0c;或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。在目前的软件开发过程中&#xff0c;缺陷是不可避免的。软件测试是发现缺陷的主要手段&#xf…