Python -- socket 服務端給客戶端發送 json,報錯 TypeError: must be string or buffer, not dict

服務端代碼:

import socket
import json

msg = {
    "Fans":1,
    "Raid":1,
    "boardTemperature":66,
    "Power":1         
}


socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socketserver.bind(("10.10.0.1",8888))
socketserver.listen(100)
while True:
    print("waiting connect...")
    clientsocket,addr = socketserver.accept()
    print("client ip:"+addr[0])
    print("client port:"+str(addr[1]))
    recvmsg = clientsocket.recv(1024)
    print("parmRevFromClient:"+recvmsg)
    if recvmsg=='Windows': 
        clientsocket.sendall(msg)
        clientsocket.close()
        print("clientsocket close")

報錯發生在 clientsocket.sendall(msg),提示 TypeError: must be string or buffer, not dict

解決:
json.dumps() 函數可以將字典(dict)轉化爲字符串(string),json.loads() 函數則反過來

修改後:

import socket
import json

msg = {
    "Fans":1,
    "Raid":1,
    "boardTemperature":66,
    "Power":1         
}


socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socketserver.bind(("10.4.79.55", 8887))
socketserver.listen(100)
while True:
    print("waiting connect...")
    clientsocket,addr = socketserver.accept()
    print("client ip:"+addr[0])
    print("client port:"+str(addr[1]))
    recvmsg = clientsocket.recv(1024)
    print("parmRevFromClient:"+recvmsg)
    if recvmsg=='Windows': 
        sendmsg = json.dumps(msg)  <-- 修改
        clientsocket.sendall(sendmsg)  <-- 修改
        clientsocket.close()
        print("clientsocket close")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章