基於socket的udp傳輸,socketserver模塊,進程

基於UDP的套接字編程

udp是無鏈接的,先啓動哪一端都不會報錯併發

socket.SOCK_DGRAM 數據報協議socket

udp不會發送空數據,什麼都不輸入直接發送也會有報頭髮過去tcp

服務端spa

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()

進程code

1.什麼是進程?server

         進程指的是一個正在運行的程序,或者說是程序的運行過程,即進程是一個抽象的概念blog

         進程是起源於操做系統的,是操做系統最核心的概念,操做系統全部其餘的概念都是圍繞進程展開的

 

2.爲什麼要進程?

         併發

 

3.如何用進程?

         開啓進程的兩種方式

 

操做系統原理

1.串行:一個任務完完整整地運行完畢後,才能運行下一個任務

2.併發:看起來多個任務是同時運行的便可,單核也能夠實現併發

3.並行:真正意義上多個任務同時運行,只有多核才能實現並行

4.cpu的功能:cpu是用來作計算的,cpu是沒法執行IO操做的,一旦遇到io操做,應該去執行別的任務

5.多道技術:

         ①空間上的複用==》多個進程共用一個內存條

         ②時間上的複用==》多個進程複用同一個cpu的時間

                  cpu遇到IO切換:能夠提高效率

                  一個進程佔用cpu時間過長也會切走:爲了實現併發效果不得已而爲之,反而會下降程序的執行效率

相關文章
相關標籤/搜索