今日内容:

  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. python3爬虫(find_all用法等)

    #read1.html文件 # <html><head><title>The Dormouse's story</title></head> ...

  2. mongodb ISODate问题(大量数据update优化)

    问题描述: 上周有个需求,把mongodb中birthday (ISO日期格式) 转换成北京时间,并保存成string类型. 最初思路: 遍历查找出的结果,逐个加8小时,然后通过_id逐个去updat ...

  3. 关于animation的一些简单基础和使用方法记载

    第一次写博客,只是单纯的想把我自己的一些心得和使用过的css3的animation的一些方法记录和总结,方便下次使用,我写的这些都是刚入门适合做一些简单的动画动作,过于复杂的还有待发掘或者使用别的方法 ...

  4. CSS 美化复选框 - 无图片方式

    今天和大家分享一个不使用图片美化复选框的方式.来看下效果图吧,如下是3种不同状态下的效果: 一. Html结构 <div class="check-wrap"> < ...

  5. 用php和ajax写一个省市区的三级联动,实现地区的下拉选择

    要实现这个页面的三级联动,我们需要建立三个php文件,第一个php文件我们导入jQuery文件,里面嵌入JavaScript:第二个php文件我们做一个php的处理页面,里面引入我们封装好的数据库类文 ...

  6. OleDbConnection SqlConnection DB2Connection 区别

    OleDbConnection适合于连接任何类型的数据库(如Oracle,SQL   Server,ACCESS等),其命名空间为:using System.Data.OleDb;.而SqlConne ...

  7. Python+Selenium笔记(六):元素定位

      (一)  前言 Web应用以及包含超文本标记语言(HTML).层叠样式表(CSS).JS脚本的WEB页面,基于用户的操作(例如点击提交按钮),浏览器向WEB服务器发送请求,WEB服务器响应请求,返 ...

  8. 团队项目个人进展——Day10

    一.昨天工作总结 冲刺第十天,与小组成员任务合并,并解决结合后的一些问题. 二.遇到的问题 界面还是不太和谐 三.今日工作规划 对页面的布局.wxss做了一些修改

  9. Web服务架构风格之REST

    REST(Representational State Transfer)是一种Web服务的架构,其目的是创建具有良好扩展性的分布式系统.它的约束包含: 使用C/S模型.client和server之间 ...

  10. C#中virtual(虚方法)的理解以及和abstract(抽象方法)的区别

    Virtual方法(虚方法) virtual 关键字用于在基类中修饰方法.virtual的使用会有两种情况: 情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法.那么在对派生类实例 ...