今日内容:

  1、关于UDP传输的模拟实现

  2、使用socketserver模块实现TCP传输的并发操作

  3、进程理论的介绍

1、关于UDP传输的模拟实现

模拟UDP传输与之前的模拟TCP传输大致相同

不同之处是:

TCP:socket(AF_INET,SOCK_STREAM)

UDP:socket(AF_INET,SOCK_DGRAM)

然后就是

UDP:传输时用的时sendto方法,接受是用recvfrom方法

两者传输效果也有明显的不同,UDP相对于TCP是一种不可靠的传输,所以它传输时可以并发(实际上并不是真正的并发),同时其传输最大限制为512bytes,一旦超过就会有很大概率丢包

服务器:
from _socket import * sever = socket(AF_INET,SOCK_DGRAM)
sever.bind(('127.0.0.1',8081))
while True:
data,client_address = sever.recvfrom(1024)
print(data.decode('utf-8'))
sever.sendto(data.upper(),client_address)
客户端:
from _socket import * client = socket(AF_INET,SOCK_DGRAM)
while True:
client.sendto('hello'.encode('utf-8'),('127.0.0.1',8081))
data,sever_address=client.recvfrom(1024)
print(data.decode('utf-8'))

2、使用socketserver模块实现TCP传输的并发操作

使用socketserver模块实现并发的代码内容是将传输代码放在一个类中,这个类中必须有一个handle方法,handle方法的内容就是传输的方法,在下面定义的是这个方法的对象每次有一个客户端接入,就会产生一个对象

客户端:
import socket PC= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ip = '127.0.0.1'
port = 8011
PC.connect((ip,port))
while True:
m = input('请输入:').strip()
PC.send(m.encode('utf-8'))
data = PC.recv(1024)
print(data.decode('utf-8'))
服务器:
import socketserver
class MyTCPhandle(socketserver.BaseRequestHandler):
def handle(self):
while True:
try:
data = self.request.recv(1024)
if len(data) == 0:break
print(data.decode('utf-8'))
self.request.send(data.upper())
except ConnectionResetError:
break
self.request.close() if __name__ == '__main__':
sever = socketserver.ThreadingTCPServer(('127.0.0.1',8081),MyTCPhandle)
sever.serve_forever()

3、进程理论的介绍

什么是进程?
    进程就是指程序在运行/执行的过程,进程是用来描述程序运行过程的虚拟概念
    进程vs程序
    程序:就是一堆代码
    进程:就是程序执行的过程
    进程的概念起源于操作系统,进程是操作系统最核心的概念,操作系统其他的概念都是围绕进程来
    什么是操作系统?
        操作系统就是用来管理/协调/控制计算机硬件资源和应用软件资源的一段控制程序
        有两大功能:
            1、将复杂的硬件操作封装成简单的接口给应用程序或者用户去使用
            2、将多个进程对硬件的竞争变得有序
   
    操作系统发展史
        并发:多个任务看起来是同时执行的
        串行:一个任务完完整整的运行完毕,才能运行下一个任务
   
    多道技术:(复用=》共享/共用)
        1、空间上的复用:多个任务复用内存的空间
        2、时间上的复用:多个任务复用cpu的时间
            1、一个任务占用cpu的时间过长会被操作系统强行剥夺走cpu的执行权限,比起串行执行反而会降低效率
            2、一个任务遇到io操作会被操作系统强行剥夺走cpu的执行权限,比起串行执行会提高效率
为何用进程?
    实现并发

day33的更多相关文章

  1. Spark Streaming揭秘 Day33 checkpoint的使用

    Spark Streaming揭秘 Day33 checkpoint的使用 今天谈下sparkstreaming中,另外一个至关重要的内容Checkpoint. 首先,我们会看下checkpoint的 ...

  2. day33——进程的创建方式、pid、空间隔离、join方法、其他属性、守护进程

    day33 进程创建的两种方式 在windows环境下,开启进程必须在______name______ == "______main______"下面 p.start(): 只是向 ...

  3. day33 前端之css

    day33 前端之css css简介 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. # 语法结构 选择器 { 属性名1,属性值 属性名2,属性值 } # ...

  4. Python全栈之路-Day33

    1 time模块 #!/usr/bin/env python # __Author__: "wanyongzhen" # Date: 2017/4/7 import time # ...

  5. python day33 ,socketserver多线程传输,ftp作业

    一.一个服务端连多个客户端的方法 1.服务端 import socketserver class MyServer(socketserver.BaseRequestHandler): def hand ...

  6. day33 锁和队列

    队列 #put 和  get #__author : 'liuyang' #date : 2019/4/16 0016 上午 11:32 # 多进程之间的数据是隔离的 # 进程之间的数据交互 # 是可 ...

  7. day33 网络编程之线程,并发以及selectors模块io多路复用

    io多路复用 selectors模块 概要: 并发编程需要掌握的知识点: 开启进程/线程 生产者消费者模型!!! GIL全局解释器锁(进程与线程的区别和应用场景) 进程池线程池 IO模型(理论) 1 ...

  8. 【Java入门提高篇】Day33 Java容器类详解(十五)PriorityQueue详解

    今天要介绍的是基础容器类(为了与并发容器类区分开来而命名的名字)中的另一个成员——PriorityQueue,它的大名叫做优先级队列,想必即使没有用过也该有所耳闻吧,什么?没..没听过?emmm... ...

  9. python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)

    先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...

  10. day33 线程的创建 验证线程之间共享数据 守护线程 线程进程效率对比 锁 死锁 递归锁

    今日内容: 1.线程理论 2.锁: 牺牲了效率,保证了数据的安全(重点) 3.守护线程 4.GIL锁:(重点) 5.计算密集型和IO密集型 6.信号量,事件(了解) 7.补充. 子进程中不能input ...

随机推荐

  1. JavaScript--动态加载脚本和样式(23)

    一 动态脚本 // 当网站需求变大,脚本的需求也逐步变大;我们不得不引入太多的JS脚本而降低了整站的性能; // 所以就出现了动态脚本的概念,在适时的时候加载相应的脚本; 1.动态引入js文件 var ...

  2. PDO中的事务处理

    基本原理和步骤其实都是一样的(可参看上一篇“MySQL的事务处理”),PDO中的事务处理就是调用PDO对象的三个方法: 开启事务:beginTransaction 回滚操作:rollBack 执行操作 ...

  3. form图片上传遇到错误

    org.springframework.web.multipart.MultipartException: The current request is not a multipart request ...

  4. js 函数中形参与实参的关系

    函数中形参与实参的关系 对于形参和实参的定义,在 权威指南中有着明确的定义.但是,我们更在意的是它们之间的关系,到底形参会不会影响到实参? 形参到底会不会影响到实参? 对于这个问题的答案,请先看以下两 ...

  5. Silverlight提示“Load 操作失败。远程服务器返回了错误: NotFound”

    调试时出现“Load 操作失败.远程服务器返回了错误: NotFound”: 一定要注意此错误之前的错误是什么?基本就是用户Cookie的问题,用户没有登录. 有时需要设置成Any CPU 有时重新编 ...

  6. angularjs -- 页面模板清除

    前几天项目在上线过程中,出现了一些新问题.页面在切换时由于前一个页面的模板清理不及时,会造成页面的重叠.导致这个问题的原因是:页面模板缓存,即上一个页面退出时,浏览器没有及时清空上一个页面的模板,导致 ...

  7. 【Redis】Redis学习(三) Redis 主从模式详解

    不管任何程序,只运行一个实例都是不可靠的,一旦因为网络原因导致所在机器不可达,或者所在服务器挂掉,那么这个程序将不能对外提供服务了,Redis也是一样的.不过Redis的主从并不是解决这个问题的,一些 ...

  8. Azure 托管镜像和非托管镜像对比

    目前中国区 Azure 也已经可以使用命令制作托管镜像了.但对于托管镜像和非托管镜像,就像托管磁盘和非托管磁盘一样,很多人可能一开始无法理解.这里就此进行了一个简单对比: 通过对比测试,这里总结了这两 ...

  9. EmEditor的一个好用的正则替换功能

    最近在编辑文本的时候用到了EmEditor的一个好用的正则替换功能.即我想用搜索到内容的一部分来生成另一段文本.例如客户提供给我一大堆MYSQL的建立主键的脚本,我想改成MSSQL的建立主键的脚本,这 ...

  10. 简单了解Tomcat与OSGi的类加载器架构

    前言: 本次博客主要是对Tomcat与OSGi的类加载器架构,所以就需要对tomcat.OSGi以及类加载机制有所了解 类加载可以在http://www.cnblogs.com/ghoster/p/7 ...