uc_16_UDP协议_HTTP协议

1  UDP协议

        适合游戏、视频等情景,安全性要求不高,效率要求高。

1)UDP不提供客户机与服务器的链接:

        UDP的客户机与服务器不必存在长期关系。一个UDP的客户机在通过一个套接字向一个UDP服务器发送了一个数据报之后,马上可以通过同一个套接字向另一个UDP服务器发送另一个数据报。同样,一个UDP服务器也可以通过同一个套接字接收来自不同客户机的数据报。

2)UDP不保证数据传输的可靠性和有序性:

        UDP的协议栈底层不提供诸如确认、超时重传、RTT估算以及序列号等机制。因此UDP数据报在网络传输的过程中,可能丢失,也可能重复,甚至重新排序。应用程序必须自己处理这些情况。

3)UDP不提供流量控制:

        UDP的协议栈底层只是一味地按照发送方的速率发送数据,全然不顾接收方的缓冲区是否装得下。

4)UDP是全双工的:

        在一个UDP套接字上,应用程序在任何时候都既可以发送数据也可以接收数据。

UDP编程模型:

        

2  UDP函数

2.1  recvfrom()

        #include <sys/socket.h>

        ssize_t recvfrom( int sockfd,   void* buf,   size_t count,   int flags,   

                                    struct sockaddr* src_addr,   socklen_t* addrlen );

                功能:从哪里接收数据

                前四个参数同recv()

                src_addr:输出源主机的地址信息

                addrlen:输出源主机的地址信息的字节数

                返回值:成功返回实际接收的字节数,失败返回-1 

2.2  sendto()

        #include <sys/socket.h>

        ssize_t sendto( int sockfd,   void const* buf,   size_t count,   int flags,

                                 struct sockaddr const* dest_addr,   socklen_t addrlen );

                功能:发送数据到哪里

                前四个参数同send()

                dest_addr:目的主机的地址信息

                addrlen:目的主机的地址信息的字节数

                返回值:成功返回实际发送的字节数,失败返回-1  

//udpser.c  基于UDP的服务器
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>int main(void){//创建套接字printf("服务器:创建套接字\n");int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd == -1){perror("socket");return -1;}//组织地址结构printf("服务器:组织地址结构\n");struct sockaddr_in ser;ser.sin_family = AF_INET;ser.sin_port = htons(8888);ser.sin_addr.s_addr = INADDR_ANY;//绑定套接字和地址结构printf("服务器:绑定套接字和地址结构\n");if(bind(sockfd,(struct sockaddr*)&ser,sizeof(ser)) == -1){perror("bind");return -1;}//业务处理printf("服务器:业务处理\n");for(;;){//接受客户端发来的小写的串char buf[64] = {};struct sockaddr_in cli;//用来输出客户端的地址结构socklen_t len = sizeof(cli);//用来输出地址结构大小if(recvfrom(sockfd,buf,sizeof(buf)-1,0,(struct sockaddr*)&cli,&len) ==-1){perror("recvfrom");return -1;}//转成大写for(int i = 0;i < strlen(buf);i++){buf[i] = toupper(buf[i]);}//将大写的串回传给客户端   if(sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)&cli,len) == -1){perror("sendto");return -1;}}//关闭套接字printf("服务器:关闭套接字\n");close(sockfd);return 0;
}

 

//udpcli.c  基于UDP的客户端
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>int main(void){//创建套接字printf("客户端:创建套接字\n");int sockfd = socket(AF_INET,SOCK_DGRAM,0);if(sockfd == -1){perror("socket");return -1;}//组织服务器地址结结构printf("客户端:组织服务器地址结结构\n");struct sockaddr_in ser;ser.sin_family = AF_INET;ser.sin_port = htons(8888);ser.sin_addr.s_addr = inet_addr("192.168.222.136");//业务处理printf("客户端:业务处理\n");for(;;){//通过键盘获取小写的串char buf[64] = {};fgets(buf,sizeof(buf),stdin);// ! 退出if(strcmp(buf,"!\n") == 0){break;}//发送给服务器if(sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)&ser,sizeof(ser)) == -1){perror("sendto");return -1;}//接受回传的大写的串if(recv(sockfd,buf,sizeof(buf)-1,0) == -1){perror("recv");return -1;}//显示printf("%s",buf);}//关闭套接字printf("客户端:关闭套接字\n");close(sockfd);return 0;
}

3  HTTP协议

        浏览器地址栏中输入URL,按下回车后经历的流程:

        1)浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址

        2)根据解析后的IP地址和默认端口80和服务器建立TCP连接

        3)浏览器发出HTTP请求

        4)服务器对浏览器的请求作出响应

3.1  HTTP的请求和响应

        

         请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔,例如GET    /index.html    HTTP/1.1。

        HTTP1.0定义了三种请求方法:GET、POST、HEAD方法。

        HTTP1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE、CONNECT方法。

        其中GET是最常用的请求方法,用来获取服务器的数据。

        请求头部由   关键字:值   对组成,每行一对。请求头部会通知服务器有关客户端请求的信息,典型的请求头有:

        -Accept:告诉服务器自己接受什么类型的介质,*/*表示任何类型,type/*表示该类型下的所有子类型;

        -Host:客户端指定自己想访问的web服务器的域名

        -User_Agent:浏览器表名自己的身份,是哪种浏览器。

        -Referer:浏览器web服务器表名自己是从哪个网页URL获得点击当前请求中的地址

        -Connection:表示是否需要持久连接

        

        HTTP响应也是由三个部分组成,分别是:状态行响应头、空行、响应正文

        当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求,常见状态码有:

        200  OK:客户端请求成功

        400  Bad Request:客户端请求有语法错误,不能被服务器所理解。

        403  Forbidden:服务器收到请求,但是拒绝提供服务。

        404  Not Found:请求资源不存在,例如输入了错误的URL。

        503  Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

        

        响应头一般包括以下内容:

        Date:响应时间

        Content-Type:响应类型

        Content-Length:响应数据大小

        Connection:连接状态

//http.c  http协议
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<arpa/inet.h>int main(void){//创建套接字int sockfd = socket(AF_INET,SOCK_STREAM,0);if(sockfd == -1){perror("socket");return -1;}//组织百度服务器的地址结构struct sockaddr_in ser;ser.sin_family = AF_INET;ser.sin_port = htons(80);ser.sin_addr.s_addr = inet_addr("220.181.38.150");//发起连接请求if(connect(sockfd,(struct sockaddr*)&ser,sizeof(ser)) == -1){perror("connect");return -1;}//组织请求 char request[1024]; "GET / HTTP/1.1\r\nHost: www.baidu.com\r\nAccetp: */*\r\n....."char request[1024] = {};sprintf(request,"GET / HTTP/1.1\r\n""Host: www.baidu.com\r\n""Accept: */*\r\n""Connection: Close\r\n\r\n");    //发送给百度服务器 sendif(send(sockfd,request,strlen(request),0) == -1){perror("send");return -1;}//接收响应 recvfor(;;){char respond[1024] = {};ssize_t size = recv(sockfd,respond,sizeof(respond)-1,0);if(size == -1){perror("recv");return -1;}if(size == 0){break;}printf("%s",respond);}printf("\n");//关闭套接字 close()close(sockfd);return 0;
}

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

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

相关文章

【flink番外篇】1、flink的23种常用算子介绍及详细示例(完整版)

Flink 系列文章 一、Flink 专栏 Flink 专栏系统介绍某一知识点&#xff0c;并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分&#xff0c;比如术语、架构、编程模型、编程指南、基本的…

Docker部署.NET6项目

Docker的三大核心概念 1、docker仓库&#xff08;repository&#xff09; docker仓库&#xff08;repository&#xff09;类似于代码库&#xff0c;是docker集中存放镜像的场所。实际上&#xff0c;注册服务器是存放仓库的地方&#xff0c;其上往往存放着很多仓库。每个仓库集…

Android引用SDK包实现高德地图展示

一、准备工作 注册高德地图开放平台 注册过程我就不多说了&#xff0c;挺简单的&#xff0c;需要登录&#xff0c;然后注册成为开发者&#xff0c;还需要支付宝认证、手机号码验证、邮箱验证挺多的&#xff0c;但是速度很快。基本上随时验证随时注册成功。新建应用新建…

基于单片机智能病床呼叫系统设计

**单片机设计介绍&#xff0c;基于单片机智能病床呼叫系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能病床呼叫系统是一种利用单片机技术设计的医疗设备&#xff0c;它能够帮助病人在住院期间快速、方便…

使用pyscenedetect进行视频场景切割

1. 简介 在视频剪辑有转场一词&#xff1a;一个视频场景转换到另一个视频场景&#xff0c;场景与场景之间的过渡或转换&#xff0c;就叫做转场。 本篇介绍一个强大的开源工具PySceneDetect&#xff0c;它是一款基于opencv的视频场景切换检测和分析工具&#xff0c;项目地址: h…

在做题中学习(31):电话号码的字母组合(全排列)

17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;既然要排列组合&#xff0c;就得先根据数字字符取出来 所以先定义一个string类的数组通过下标取到每个数字对应的映射。 string _numsTostr[10]{"","","abc"…

Android:java.lang.RuntimeException: Unable to start activity ComponentInfo

java.lang.RuntimeException: Unable to start activity ComponentInfo 报错描述&#xff1a; 在导入别人项目运行时出现了这个报错&#xff1a; java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.news/com.example.activity.DetailNews}: ja…

消息队列使用指南

介绍 消息队列是一种常用的应用程序间通信方法&#xff0c;可以用来在不同应用程序或组件之间传递数据或消息。消息队列就像一个缓冲区&#xff0c;接收来自发送方的消息&#xff0c;并存储在队列中&#xff0c;等待接收方从队列中取出并处理。 在分布式系统中&#xff0c;消…

PAD平板签约投屏-高端活动的选择

传统的现场纸质签约仪式除了缺乏仪式感之外还缺少互动性&#xff0c;如果要将签约的过程投放到大屏幕上更是需要额外的硬件设备成本。相比于传统的纸质签约仪式&#xff0c;平板现场电子签约的形式更加的新颖、更富有科技感、更具有仪式感。 平板签约投屏是应用于会议签字仪式的…

【面试经典150 | 二叉树】翻转二叉树

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;递归方法二&#xff1a;迭代 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题…

笔记69:Conv1d 和 Conv2d 之间的区别

笔记地址&#xff1a;D:\work_file\&#xff08;4&#xff09;DeepLearning_Learning\03_个人笔记\4. Transformer 网络变体 a a a a a a a a a a a

万户 ezOFFICE convertFile 文件读取漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

电脑搜不自己的手机热点,其余热点均可!

一、现象&#xff1a; 之前可正常连接&#xff0c;突然间发现收不到自己的WiFi信号&#xff0c;其余人均可收到。通过重复手机电脑关机、改变热点设置中的频段等方式均没解决&#xff0c;同事电脑和手机可搜索到我的WiFi。 二、问题&#xff1a; WiF驱动程序更新 三&#x…

【Docker】Docker Compose,yml 配置指令参考的详细讲解

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

delphi android打开外部文件,报错android.os.FileUriExposedException解决方法

Android 7.0强制启用了被称作 StrictMode的策略&#xff0c;带来的影响就是你的App对外无法暴露file://类型的URI了。 如果你使用Intent携带这样的URI去打开外部App(比如&#xff1a;打开系统相机拍照)&#xff0c;那么会抛出FileUriExposedException异常。 Delphi 为Android…

用Java实现一对一聊天

目录 服务端 客户端 服务端 package 一对一用户; import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; imp…

C# 静态构造函数与类的初始化

静态构造函数&#xff1a; 基本概念&#xff1a; 静态构造函数用于初始化任何静态数据。 静态构造函数的常见特性&#xff1a; 静态构造函数不使用访问修饰符或不具有参数。因为静态构造函数由系统调用&#xff0c;无法人为调用&#xff0c;所以就不存在public、private等。…

【开源】基于Vue和SpringBoot的在线课程教学系统

项目编号&#xff1a; S 014 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S014&#xff0c;文末获取源码。} 项目编号&#xff1a;S014&#xff0c;文末获取源码。 目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2…

Java IO流(五)(字符集基础知识简介)

字符集 计算机的存储规则&#xff08;英文字符&#xff09; 常见字符集介绍 a.GB2312字符集&#xff1a;1980年发布&#xff0c;1981年5月1日实施的简体中文汉字编码国家标准。收录7445个图形字符&#xff0c;其中包括6763个简体汉字 b.BIG5字符集&#xff1a;台湾地区繁体中…

【Angular开发】Angular在2023年之前不是很好

做一个简单介绍&#xff0c;年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【架构师酒馆】…