1. 程式人生 > 其它 >【Python】通過socket套接字實現物件傳輸程式碼demo

【Python】通過socket套接字實現物件傳輸程式碼demo

技術標籤: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)