Непонятно, почему у вас есть операторы print в ваших class
объявлениях, но если поместить ваши данные в оператор print, объявление класса, конечно, не то, что вам нужно.
Вы правильно выбираете, отправляете,и получение объекта, но ваш объект ничего не делает.
Вероятно, вам понадобится какой-то модуль с вашим общим типом данных, и тогда клиент и сервер смогут взаимодействовать с этим типом.
Я создал processdata.py
со следующим:
class ProcessData:
def __init__(self, data= 'ABCDEFGHIJK'):
self.data = data
def __str__(self): return self.data
И затем изменил ваш код следующим образом:
КЛИЕНТ
import socket, pickle
from processdata import ProcessData
HOST = 'localhost'
PORT = 50007
# Create a socket connection.
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
# Create an instance of ProcessData() to send to server.
variable = ProcessData()
# Pickle the object and send it to the server
data_string = pickle.dumps(variable)
s.send(data_string)
s.close()
print 'Data Sent to Server'
СЕРВЕР
import socket, pickle
print "Server is Listening....."
HOST = 'localhost'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
data = conn.recv(4096)
data_variable = pickle.loads(data)
conn.close()
print data_variable
print 'Data received from client'
И тогда я получаю
Server is Listening.....
Connected by ('127.0.0.1', 50941)
ABCDEFGHIJK
Data received from client