вот мой клиент tpp python. Я хочу отправить json-объект на сервер. Но я не могу отправить объект с помощью метода sendall(). как я могу это сделать?Как отправить объект json с помощью tcp-сокета в python
import socket
import sys
import json
HOST, PORT = "localhost", 9999
m ='{"id": 2, "name": "abc"}'
jsonObj = json.loads(m)
data = jsonObj
# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# Connect to server and send data
sock.connect((HOST, PORT))
sock.sendall(jsonObj)
# Receive data from the server and shut down
received = sock.recv(1024)
finally:
sock.close()
print "Sent: {}".format(data)
print "Received: {}".format(received)
Когда вы говорите: «Я не могу отправить объект», видите ли вы какие-либо ошибки? Или программа застревает? Вы проверили, что TCP-сервер прослушивает localhost: 9999? –
сервер слушает. и появляется следующее сообщение об ошибке .. TraceBack (самый последний вызов последнего): Файл "C: /Users/Lochana/PycharmProjects/SocketClient/TCPClient.py", линия 19, в sock.sendall (jsonObj) файла «C: \ Python27 \ lib \ socket.py», строка 228, в методе return getattr (self._sock, name) (* args) ** TypeError: sendall() аргумент 1 должен быть строкой или буфером, а не dict ** –
В этом случае вам нужно сериализовать dict в строку. Или передать объект 'm' для sendall вместо 'jsonObj'. (Что такое сериализация - https://en.m.wikipedia.org/wiki/Serialization) –