zoukankan      html  css  js  c++  java
  • 基于socket的udp传输,socketserver模块,进程

    基于UDP的套接字

    udp是无连接的,先启动哪一端都不会报错

    socket.SOCK_DGRAM 数据报协议

    udp不会发送空数据,什么都不输入直接发送也会有报头发过去

    服务端

    import socket
    
    server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    server.bind(('127.0.0.1',8080))
    
    while True:
        data,client_addr = server.recvfrom(1024)
        print(data)
        server.sendto(data.upper(),client_addr)
    
    客户端
    import socket
    
    client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    
    while True:
        msg = input('>>:')
        client.sendto(msg.encode('utf-8'),('127.0.0.1',8080))
        data,server_addr = client.recvfrom(1024)
        print(data)
    socketserver模块

    使用socketserver类实现基于tcp的并发编程

    import socketserver
    
    class MyHandler(socketserver.BaseRequestHandler):
        def handle(self):
            # 通信循环
            while True:
                try:
                    data = self.request.recv(1024)
                    if len(data) == 0: break
                    self.request.send(data.upper())
                except ConnectionRefusedError:
                    break
            self.request.close()
    
    
    if __name__ == '__main__':
        s = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyHandler, bind_and_activate=True)
        s.serve_forever() # 代表连接循环
        # 循环建立连接,每建立一个连接就会启动一个线程(服务员),专门与刚刚建立好的连接做通信循环

    使用socketserver类实现基于udp的并发编程

    import socketserver
    
    
    class MyHandler(socketserver.BaseRequestHandler):
        def handle(self):
            # 通信循环
            print(self.__dict__)
            print(self.client_address)
            print(self.request)
    
            data = self.request[0]
            print('客户消息', data)
            self.request[1].sendto(data.upper(), self.client_address)
    
    
    if __name__ == '__main__':
        s = socketserver.ThreadingUDPServer(('127.0.0.1', 8081), MyHandler)
        s.serve_forever()

    进程

    1.什么是进程?

             进程指的是一个正在运行的程序,或者说是程序的运行过程,即进程是一个抽象的概念

             进程是起源于操作系统的,是操作系统最核心的概念,操作系统所有其他的概念都是围绕进程展开的

    2.为何要进程?

             并发

    3.如何用进程?

             开启进程的两种方式

    操作系统原理

    1.串行:一个任务完完整整地运行完毕后,才能运行下一个任务

    2.并发:看起来多个任务是同时运行的即可,单核也可以实现并发

    3.并行:真正意义上多个任务同时运行,只有多核才能实现并行

    4.cpu的功能:cpu是用来做计算的,cpu是无法执行IO操作的,一旦遇到io操作,应该去执行别的任务

    5.多道技术:

             ①空间上的复用==》多个进程共用一个内存条

             ②时间上的复用==》多个进程复用同一个cpu的时间

                      cpu遇到IO切换:可以提升效率

                      一个进程占用cpu时间过长也会切走:为了实现并发效果不得已而为之,反而会降低程序的执行效率



  • 相关阅读:
    prufer 序列 学习笔记
    题解 [SDOI2009]E&D/染色游戏/Moving Pebbles
    题解 Christmas Game
    题解 [HNOI/AHOI2018]毒瘤
    题解 UVA1500 Alice and Bob
    Mac端影片压制流程
    react:Text nodes cannot appear as a child
    阿里云docker镜像地址
    Vscode 智能插件
    vue-vant实现IndexBar索引栏
  • 原文地址:https://www.cnblogs.com/luck-L/p/9289564.html
Copyright © 2011-2022 走看看