UDP通訊 數據報協議(自帶報頭) 沒有雙向通道 通訊相似於發短信 1.udp協議客戶端容許發空 2.udp協議不會粘包 3.udp協議服務端不存在的狀況下,客戶端照樣不會報錯? 4.udp協議支持併發 UDP相似於發短信 TCP相似於打電話 併發:看起來像同時運行的 並行:真正意義上的同時運行
客戶端python
import socket client = socket.socket(type=socket.SOCK_DGRAM) # 不須要創建鏈接 直接進入通訊循環 server_address = ('127.0.0.1',8080) while True: client.sendto(b'hello',server_address) data, addr = client.recvfrom(1024) print('服務端發來的數據',data) print('服務端的地址',addr)
服務端併發
import socket server = socket.socket(type=socket.SOCK_DGRAM) # UDP協議 server.bind(('127.0.0.1',8080)) # UDP不須要設置半鏈接池 它也沒有半鏈接池的概念 # 由於沒有雙向通道 不須要accept 直接就是通訊循環 while True: data, addr = server.recvfrom(1024) print('數據:',data) # 客戶端發來的消息 print('地址:',addr) # 客戶端的地址 server.sendto(data.upper(),addr)
import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): # print('來啦 老弟') while True: data = self.request.recv(1024) print(self.client_address) # 客戶端地址 print(data.decode('utf-8')) self.request.send(data.upper()) if __name__ == '__main__': """只要有客戶端鏈接 會自動交給自定義類中的handle方法去處理""" server = socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyServer) # 建立一個基於TCP的對象 server.serve_forever() # 啓動該服務對象 import socket import time client = socket.socket(type=socket.SOCK_DGRAM) server_address = ('127.0.0.1',8080) while True: client.sendto(b'hello',server_address) data,addr = client.recvfrom(1024) print(data.decode('utf-8'),addr) time.sleep(1)