今日内容:

  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. Atcoder:AGC004F Namori

    传送门 先考虑树,树是一个二分图. 看到是二分图并且每次是对两边的同色的点反色可以想到转化:让奇数层的点为黑,偶数为白,变成每次可以交换两个点的颜色. 把黑看成 \(-1\),白看成 \(1\),那么 ...

  2. json 平面转树状 child [zhuan]

    <script> /** * json格式转树状结构 * @param {json} json数据 * @param {String} id的字符串 * @param {String} 父 ...

  3. adb shell 操作sqlite数据库

    程序中数据库文件路径在/data/data/<package  name>/databases/ adb shell   进入adb命令行 ls 列出当前文件夹下所有文件 假设有一个名为a ...

  4. 安卓开发实用技巧:TextView预览

    背景: 使用TextView时,为了方便在开发工具中预览效果,需要在TextView中设置文字(如:android:text="Hello World"),但是等到后面提交时,为了 ...

  5. [Objective-C] id类型和instancetype类型

    前些时间在源码里看到instancetype返回类型,一脸惊异,表示接触iOS不久没见过这东西,但发现跟id功能差不多.故查了一些资料,了解了两者之间的区别,故将资料简单翻译整理了一下,为博客充一个数 ...

  6. Webpack打包报"JavaScript heap out of memory"错误

    问题 开发项目有一段时间了,随着项目越来越大,打包的时间也相应的变长了,打包时的内存也增多了.这时候产生了一个问题,在发布项目的时候,会出现JavaScript heap out of memory错 ...

  7. LeetCode 题解之 Two Sum

    1.题目描述 2.问题分析 使用hashTable 寻找,target  -  num[i] ,将时间复杂度降低到 O(n): 3.代码 vector<int> twoSum(vector ...

  8. linux操作系统不重启添加raid0步骤

    1.限制:本步骤仅适用于LSI芯片的raid卡,可以通过以下蓝色指令判断是否LSI芯片 [root@HKC-Lab-CDN ~]# lspci | grep -i lsi 03:00.0 RAID b ...

  9. Python实例---爬去酷狗音乐

    项目一:获取酷狗TOP 100 http://www.kugou.com/yy/rank/home/1-8888.html 排名 文件&&歌手 时长 效果: 附源码: import t ...

  10. VS网站开发的发布部署的不同情况说明

    VS网站开发有两种模式: 1.网站模式 2.应用模式 其中,网站模式的发布,要考虑勾选“使用固定命名和单页程序集”   如下图   网站模式: 新建网站的网站模式   新建网站的网站模式第二步   应 ...