CS/BS架構。。socket套接字
阿新 • • 發佈:2021-07-21
CS/BS架構
1.基於TCP的socket服務端和客戶端 2.加入連結迴圈 3.加入通訊迴圈 http的預設埠80 https的預設埠443 先從伺服器端說起。 伺服器端先初始化Socket, 然後與埠繫結(bind), 對埠進行監聽(listen), 呼叫accept阻塞,等待客戶端連線。 在這時如果有個客戶端初始化一個Socket, 然後連線伺服器(connect),如果連線成功, 這時客戶端與伺服器端的連線就建立了。 客戶端傳送資料請求,伺服器端接收請求並處理請求, 然後把迴應資料傳送給客戶端,客戶端讀取資料,最後關閉連線,一次互動結束. TCP服務端 socket --> bind --> listen --> accept -->read -->write -->read -->close TCP客戶端 socket --> connect --> write --> read --> close # 獲取tcp/ip套接字 tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 獲取udp/ip套接字 udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) bind 繫結ip或埠 listen 監聽客戶端 accept 接收 傳遞結束關閉當前工作的客戶端 tcp # 服務端 # # 服務端 # import socket # # 第一個socket是模組名,第二個是類名 # # SOCK_STREAM ==> 基於TCP協議寫的 # server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM) # # # 不傳就代表tcp協議 # # server = socket.socket() # # # 繫結監聽地址 http的預設埠80 https的預設埠443 # server.bind(('127.0.0.1',8080)) # # # listen監聽,半連線池 ps:不是同時服務5個 # server.listen(5) # # # 接收訊息 # print('正在接受客戶端資訊:') # while True: # # sock 當前連線物件 addr 客戶端的地址 ip+埠port # sock, addr = server.accept() # print(sock) # print(addr) # # while True: # try: # # 1024 bytes 最多接收1024位元組 # data = sock.recv(1024) # if len(data) == 0: # break # print(data) # # sock.send(data.upper()) # except Exception as e: # print(e) # break # sock.close() # # server.close() # 客戶端 # import socket # # client = socket.socket() # # client.connect(('1027.0.0.1',8080)) # while True: # input_data = input('請輸入要傳輸的資料:(q to quit)').strip() # # if not input_data:continue # # if input_data == 'q': # break # # client.send(input_data.encode('utf-8')) # # data = client.recv(1024) # print(data) # # client.close() udp 服務端 import socket # SOCK_DGRAM =》 udp服務端 # SOCK_STREAM =》 tcp服務端 server = socket.socket(type=socket.SOCK_DGRAM) server.bind(('127.0.0.1', 8080)) while True: # client_addr: 客戶端地址 data, client_addr = server.recvfrom(1024) print(data) print(client_addr) server.sendto(data.upper(), client_addr) server.close() 客戶端 import socket client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 資料報協議-》UDP while True: msg = input('>>: ').strip() # msg='' client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080)) # 接收服務端返回的資料 data, server_addr = client.recvfrom(1024) print(data) client.close()
程序
程序的概念 程序是系統進行資源分配和排程的基本單位 程式和程序: 程式是靜態的,沒有生命週期 程序是動態的,是有生命週期的 協程 程序是作業系統分配資源的基本單位,執行緒是作業系統執行的最小單位 程序不是實際幹活的人,真正幹活的是執行緒 一個程式中必須要有一個程序 一個程序必須要有一個執行緒 程序的三種狀態: 就緒態: 執行態 阻塞態 程序排程:(瞭解) 先來先服務 短作業優先 時間片輪轉法 i/o密集型 io阻塞 input output 計算密集型 沒有IO消耗