2016-10-02 3 views
2

вот мой клиент 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) 
+0

Когда вы говорите: «Я не могу отправить объект», видите ли вы какие-либо ошибки? Или программа застревает? Вы проверили, что TCP-сервер прослушивает localhost: 9999? –

+0

сервер слушает. и появляется следующее сообщение об ошибке .. 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 ** –

+0

В этом случае вам нужно сериализовать dict в строку. Или передать объект 'm' для sendall вместо 'jsonObj'. (Что такое сериализация - https://en.m.wikipedia.org/wiki/Serialization) –

ответ

1

Пропустить json.loads() часть. Отправьте json-объект как строку json и загрузите его из строки в TCP-клиенте.

Также проверьте: Python sending dictionary throught TCP

+0

спасибо. но есть ли способ отправить объект json? –

+0

Нет, вы не можете отправить объект JSON. Вы должны сначала сериализовать его –

+0

ok ... thanks :) –

Смежные вопросы