今日内容:

  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. java post请求的表单提交和json提交简单小结

    在java实现http请求时有分为多种参数的传递方式,以下给出通过form表单提交和json提交的参数传递方式: public String POST_FORM(String url, Map< ...

  2. 说说对npm的开发模式和生产模式的理解

    nodejs这些年的发展非常快,相信没有哪个前端不知道的了,npm也成为了前端开发中经常用到了的一个命令.那么npm不是只用一个 "npm install xxx"命令就够了吗?实 ...

  3. cf113D. Museum(期望 高斯消元)

    题意 题目链接 Sol 设\(f[i][j]\)表示Petya在\(i\),\(Vasya\)在\(j\)的概率,我们要求的是\(f[i][i]\) 直接列方程高斯消元即可,由于每个状态有两维,因此时 ...

  4. JS里面的懒加载(lazyload)

    懒加载技术(简称lazyload)并不是新技术, 它是js程序员对网页性能优化的一种方案.lazyload的核心是按需加载 涉及到图片,falsh资源 , iframe, 网页编辑器(类似FCK)等占 ...

  5. idea中连接oracle数据库打包

    问题:在使用idea连接oracle数据时发现oracle.jdbc.OracleDriver引用这个包报错,找不到包.解决方法:在idea的terminal命令框中输入如下命令.我的jar包的位置在 ...

  6. VMware Linux下拖拽补丁vmtools的安装和卸载

    Linux下拖拽补丁vmtools的安装和卸载 by:授客 QQ:1033553122 Vmware 8.0.4为例子 步骤1.VM->Install Vmware Tools... 步骤2.查 ...

  7. singleInstance和singleTask导致startActivityForResult回调失败

    先来了解下这两种启动模式: 1.singleInstance,全局唯一,它的实例在全局(即在众多任务栈中)是唯一的,它单独地存在于属于自己的任务栈中,而且这个任务栈没有其他实例. 2.singleTa ...

  8. [Android] 实现简单的相机程序

    好久没写了,有些东西做过都快忘了,赶紧记一下. 现在来实现一个简单的相机程序. 原文地址http://www.cnblogs.com/rossoneri/p/4246134.html 当然需要的话可以 ...

  9. APP主要测试类型及测试点总结

    根据测试重点区分 一.功能性测试 根据产品需求文档编写测试用例: 根据设计文档编写测试用例: 根据UI原型图编写测试用例 二.UI测试 原型图/效果图对比 用户体验 数据模拟:需要考虑正式环境可能的数 ...

  10. 负载均衡(Load Balancing)学习笔记(一)

    概述 在分布式系统中,负载均衡(Load Balancing)是一种将任务分派到多个服务端进程的方法.例如,将一个HTTP请求派发到实际的Web服务器中执行的过程就涉及负载均衡的实现.一个HTTP请求 ...