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时间过长也会切走:为了实现并发效果不得已而为之,反而会降低程序的执行效率



  • 相关阅读:
    【笔记】求数据前n个主成分以及对高维数据映射为低维数据
    使用sklearn中的fetch_mldata的错误情况以及可能可行的解决方法
    【笔记】求数据的对应主成分PCA(第一主成分)
    【笔记】主成分分析法PCA的原理及计算
    【笔记】如何确定梯度计算的准确性以及调试梯度下降法
    【笔记】随机梯度下降法
    【笔记】线性回归中的梯度下降法(实现以及向量化并进行数据归一化)
    AttributeError: module 'numpy' has no attribute 'num'
    灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟?
    容器云在证券行业的探索与实践
  • 原文地址:https://www.cnblogs.com/luck-L/p/9289564.html
Copyright © 2011-2022 走看看