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…

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

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

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

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

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

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

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

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

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

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

工具(linux)

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

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

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

【北航主办丨本届SPIE独立出版丨已确认ISSN号】第三届智能机械与人机交互技术学术会议(IHCIT 2024,7月27)

由北京航空航天大学指导&#xff0c;北京航空航天大学自动化科学与电气工程学院主办&#xff0c;AEIC学术交流中心承办的第三届智能机械与人机交互技术学术会议&#xff08;IHCIT 2024&#xff09;将定于2024年7月27日于中国杭州召开。 大会面向基础与前沿、学科与产业&#xf…

路由表与IP数据报转发:基础小白指南

目录 1. 路由表的基本概念 2. 路由表中的默认路由 3. IP数据报的转发流程 4. 路由聚合 5. 最长前缀匹配 总结 在网络世界中&#xff0c;IP数据报的转发是如何进行的&#xff1f; 这篇文章将带你深入了解路由表的基本概念和IP数据报的转发流程。我们会用简洁明了的语言和实…

nodejs启动项目报错 Error: listen EACCES: permission denied 0.0.0.0:5000

nodejs启动项目报错 Error: listen EACCES: permission denied 0.0.0.0:5000&#xff0c;截图如下&#xff1a; 解决方法 在管理员权限下打开 CMD&#xff08;命令行&#xff09;并运行&#xff1a; net stop winnatnet start winnat 执行完成后在此通过nodejs启动项目即可…

centos系统mysql数据库差异备份与恢复

文章目录 差异备份mysql数据一、 安装 Percona XtraBackup数据库中创建一些数据三、创建全备份四、创建差异备份1. 在数据库中添加数据&#xff0c;让数据发生一些改变2. 创建第一个差异备份3. 数据库中再次添加一些数据4. 创建第二个差异备份 五、模拟数据丢失&#xff0c;删库…

minio 服务docker配置

用minio docker配置了一个服务&#xff0c;分享链接始终是127.0.01开始的&#xff0c; 改成docker的host的ip则提示签名不匹配&#xff0c; 好在这个文件主要是用来下载的&#xff0c;所以可以通过设置bucket的匿名访问权限来实现下载&#xff1b; 这样不需要后面的地址参数就…

UM960硬件设计,最小系统推荐设计

备注&#xff1a; l L1&#xff1a;推荐使用 0603 封装的 68 nH 射频电感l C1&#xff1a;推荐使用 100 nF 100 pF 两个电容并联l C2&#xff1a;推荐使用 100 pF 电容l C3&#xff1a;推荐使用 n 10 μF 1 100 nF 电容并联&#xff0c;总容值不小于 30 μFl R1&#xff1…

Mysql sql技巧与优化

1、解决mysql同时更新、查询问题 2、控制查询优化 hint 3、 优化 特定类型的查 优化 COUNT() 查询 使用 近似值 业务能接受近似值的话&#xff0c;使用explain拿到近似值 优化关联查询 优化子查询 4、优化group by和distinct 优化GROUP BY WITH ROLLUP 5、优化 limit分页 其他…

AI智能名片微信小程序在品牌战略与私域流量构建中的应用与深度探索

摘要&#xff1a;在数字经济时代&#xff0c;私域流量的价值日益凸显&#xff0c;成为企业和个人实现可持续增长的重要驱动力。品牌&#xff0c;作为私域流量的核心&#xff0c;其稳定性和影响力直接关系到流量的质量与转化效率。AI智能名片微信小程序&#xff0c;作为数字营销…

为什么样本方差(sample variance)的分母是 n-1?

样本均值与样本方差的定义 首先来看一下均值&#xff0c;方差&#xff0c;样本均值与样本方差的定义 总体均值的定义&#xff1a; μ 1 n ∑ i 1 n X i \mu\frac{1}{n}\sum_{i1}^{n} X_i μn1​i1∑n​Xi​ 也就是将总体中所有的样本值加总除以个数&#xff0c;也可以叫做总…