python_day33- udp 多道技术

一 udp:(用户数据报协议)

定义:

是一种协议,中文翻译为用户数据报协议,是传输层的以一层协议,是一种不可靠快速传输协议. 一般适合比较小数据之间的传递

优点:
传输速度快   不会产生粘包问题
缺点:

无法保证数据传输的完整性   不提供数据包分组、组装和不能对数据包进行排序的缺点

应用场景:一般游戏中  和 视频通讯中  运用较多

 

二 UDP和TCP比较:

TCP    可靠传输  能够保证数据的完整性  传输内容较大  传输速度慢  效率慢   会产生粘包问题   适合需要完整信息的传递  如  线上支付  文本信息传输等

UDP    不可靠快速传输  无法保证数据传输的完整性  传输的内容较小  效率快 不会产生粘包问题  适合那些对数据不要求完整的数据传输

 

三  基于UDP的socket

和tcp一样  可以理解为某个过程  根据UDP特点  可以把建立socket的udp协议当做一个传呼机通讯的过程

 

 客户端版本 
from socket import *   # 导入socket下的所有用法 

client = socket(AF_INET,SOCK_DGRAM)  # 1 买传呼机  指定格式是基于UDP
while True:
    msg = input('输入信息:')
    client.sendto(msg.encode('utf-8'),('127.0.0.1',1988)) # 2 传输的内容和具体接口  相当与数据和频道
    data,addr =client.recvfrom(1472)  # 3 接收的时候 
    print(data)

 

服务器版本

from socket import *

server= socket(AF_INET,SOCK_DGRAM)  # 1 买传呼机  指定是udp格式
server.bind(('127.0.0.1',1988))  #  2 确定自己的频道和端口   绑定ip和端口号
while True:
    data,addr = server.recvfrom(1472)  # 3 接收信息  需要确定是从哪传输过来的 需要保存数据和地址  #  1472一般是默认最优
    server.sendto(data,addr)  # 4 发送数据 地址 给对方 信息


其中1472是udp最大数据长度 

 

 

基于UDP的时间服务器练习

客户端
from socket import *

client = socket(AF_INET,SOCK_DGRAM)

while True:
    client.sendto('%Y-%m-%d'.encode('utf-8'), ('127.0.0.1',1988))
    data = client.recvfrom(1472)
    print(data)


服务器
from socket import *
import time

server= socket(AF_INET,SOCK_DGRAM)
server.bind(('127.0.0.1',1988))

while True:
    data,addr = server.recvfrom(1742)
    res = time.strftime(data.decode('utf-8'),time.localtime())  # 转化的是字符串可是

    server.sendto(res.encode('utf-8'),addr)  #  在解码成utf-8格式

 

 

基于UDP格式socket的注意点

注意1:发送方的数据长度应与接收方的接受长度统一,否则将丢失数据,windows下直接报错。

注意2:缓存区大小不可能无限大,如果要传输大数据超过UDP数据报大小,则需要在UDP基础上加上额外的应用层协议。

 

四 基于UDP应用DNS  (了解)

我们都知道,两台计算机要通讯则必须知道对方的IP地址,但是IP地址较复杂不方便记忆,造成用户上网成本高,体验差,于是就想到了给IP地址取别名的办法,这就是域名。如www.baidu.com

域名:

是给IP地址取的别名,同时为了在查询名字与地址对应关系时更快,所以给域名也划分了不同区域。

分类

1.1 国际顶级域名,工商企业.com .top,网络提供商.net,非营利性组织.org,教育.edu

1.2 国际域名,中国.cn,美国.us,日本.jp

但随之而来的问题是域名虽然简化了记忆,但是数据传输依然要依赖IP地址和端口,所以想要还要提供一个可以通过域名获取ip的机制,这就是DNS

DNS

全称域名解析服务器,其本质上就是一个大型数据库系统

DNS访问流程:

当我们要访问一个地址如www.baidu.com

1.浏览器首先会询问本地DNS服务器(即网络运营商如电信,联通),以获取对应的IP,

2.如果本地DNS中没有想要的记录,则本地DNS,会询问根(1级)域名服务器,全球有13台

根域名服务器中不可能存储全世界所有IP所以它仅存储顶级(2级)域名服务器的IP

例如:COM域主服务器的IP,NET域主服务器的IP

3.于是本地DNS得到COM域服务器IP后向其发送请求,

4.由于一个域名可以对应多个IP所以还需要向三级域名主机发出请求

5.最后将返回的IP信息缓存到本地DNS中备用

 

五 进程篇

什么是进程 :

指的是正在运行的程序 是一系列过程的的统称  也是操作系统在调度和进行资源分配的接班单位

进程的概念来自于操作系统  简单介绍下 

操作系统的作用 

1)屏蔽复杂繁琐的硬件接口  为应用程序提供简单应用的系统接口

2) 操作系统将应用程序对资源的分配的竞争变得有序起来

多线程中的多道技术:

多线程 指的是多个应用程序同时进行 (其实也是有先后顺序的  因为计算机速度特别快,给人的感觉上就像是同时进行)

多道技术:

多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。

空间上的复用:将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序。

时间上的复用:当一个程序在等待I/O时,另一个程序可以使用cpu,如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100%,类似于我们小学数学所学的统筹方法。(操作系统采用了多道技术后,可以控制进程的切换,或者说进程之间去争抢cpu的执行权限。这种切换不仅会在一个进程遇到io时进行,一个进程占用cpu时间过长也会切换,或者说被操作系统夺走cpu的执行权限)

空间上的复用最大的问题是:程序之间的内存必须分割,这种分割需要在硬件层面实现,由操作系统控制。如果内存彼此不分割,则一个程序可以访问另外一个程序的内存,

首先丧失的是安全性,比如你的qq程序可以访问操作系统的内存,这意味着你的qq可以拿到操作系统的所有权限。

其次丧失的是稳定性,某个程序崩溃时有可能把别的程序的内存也给回收了,比方说把操作系统的内存给回收了,则操作系统崩溃。

 

 

 

转载于:https://www.cnblogs.com/wakee/p/10952062.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值