1.UDP協議簡介
UDP,用戶數據報傳輸協議,它位於TCP/IP協議的傳輸層,是一種無連接的協議,它發送的報文不能確定是否完整地到達了另外一端。
2.python創建UDP服務器
server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # udp協議
ip_port = ('ip地址',端口號)
server.bind(ip_port)
#服務器接收數據
data, client_addr = server.recvfrom(BUFSIZE)
#注意:data數據類型爲byte數組
if len(data) > 0:
#服務器發送數據
server.sendto(data.upper(), client_addr)
3.python創建UDP客戶端
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # udp協議
ip_port = ('ip地址',端口號)
#客戶端發送數據
client.sendto(msg, ip_port)
#客戶端接收數據
data, server_addr = client.recvfrom(BUFSIZE)
#注意:data數據類型爲byte數組
4.結果運行實例
客戶端界面
服務器界面
5.總結
(1)基於UDP通訊的服務器與客戶端,可創建子線程去響應接收消息與發送消息。
(2)子線程要更新主線程中控件變量的值時,可採用消息傳遞機制。子線程中修改主線程的變量,主線程讀取變量並繪製。
# 關鍵:繼承QThread
class Server_RunThread(QThread):
signal = pyqtSignal(str)
def __init__(self,parent = None):
super().__init__(parent)
def run(self):
while True:
data, client_addr = server.recvfrom(BUFSIZE)
if len(data) > 0:
server.sendto(data.upper(), client_addr)
self.signal.emit(str(data))
# 創建線程
serverThread = Server_RunThread()
serverThread.signal.connect('線程執行的方法')