【Python】通過socket套接字實現物件傳輸程式碼demo
阿新 • • 發佈:2021-01-15
技術標籤:python基礎
一、指令碼執行環境
系統:ubantu16.04
語言:python3.6
二、建立UDP服務端
1、建立udp socket服務端
# coding=UTF-8 import socket import pickle from myobj import Myobj def main(): """ # 建立一個套接字接收資料 :return: """ # 建立一個套接字 receive_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 繫結埠 發資料套接字可以不繫結埠,接收資料套接字要繫結埠 localaddr = ("", 7788) receive_socket.bind(localaddr) # 接收資料 recv_data = receive_socket.recvfrom(1024) recv_msg = recv_data[0] print(pickle.loads(recv_msg)) myobj = pickle.loads(recv_msg) print(myobj.name) # 關閉套接字 receive_socket.close() if __name__ == '__main__': main()
2、建立myobj類
class Myobj():
def __init__(self):
self.name = "zhangsan"
self.age = 13
備註:由於pickle包存在的bug,如果不在服務端建立一個客戶端傳送來的物件的類,則服務端在讀取到客戶端傳送來的物件會報錯
報錯如圖所示
三、建立udp客戶端
# coding = utf-8 import socket import pickle class Myobj(): def __init__(self): self.name = "zhangsan" self.age = 13 def create_obj(): myobj = Myobj() return myobj def main(myobj): """ 建立一個套接字 :return: """ # 建立一個套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 繫結埠 udp_socket.bind(("192.168.244.140", 6677)) # 使用套接字收發資料 udp_socket.sendto(pickle.dumps(myobj), ("192.168.244.146", 7788)) # 關閉套接字 udp_socket.close() if __name__ == '__main__': myobj = create_obj() main(myobj)