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



猜你喜欢

转载自www.cnblogs.com/luck-L/p/9289564.html