zoukankan      html  css  js  c++  java
  • day33

    今日内容:

      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的执行权限,比起串行执行会提高效率
    为何用进程?
        实现并发
  • 相关阅读:
    Core的学习三:容器的使用实例
    Core的学习二:【四步完成】.Net Core中Log4net的使用,配置,【框架.NET5】
    C#7 的一些新语法
    C#6 的一些新语法
    Core的学习一:Core部署在IIS下
    C# 特性【Attribute】【什么是特性?以及特性的一些修饰】
    C#反射
    泛型 -Generic 【why,原理,与普通方法,object的性能对比如何?泛型类、泛型方法、泛型接口、泛型委托,泛型约束,协变 逆变,泛型缓存】
    springboot通过切面编程实现系统请求操作日志记录
    Linux 【安装配置VM虚拟机】
  • 原文地址:https://www.cnblogs.com/yaoxiaofeng/p/9588231.html
Copyright © 2011-2022 走看看