我已将python中的pickle函数用于套接字编程问题。但是我在服务器上收到的输出被打印为“ << strong>主要。ProcessData实例位于0x7fbacba37f38>”,而不是发送的内容。
服务器和客户端代码如下:
服务器
import socket, pickle
class ProcessData:
print "Server is Listening....."
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'
客户
import socket, pickle
class ProcessData:
print 'ABCDEFGHIJK'
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'
我得到以下输出:
服务器正在侦听。 服务器正在监听..... 连接者('127.0.0.1',34726) << strong>主要。ProcessData实例位于0x7f8e2dfaaf80> 从客户那里收到的数据
但是我必须得到ABCDEFGHIJ。 我该怎么办?
答案 0 :(得分:1)
不清楚为什么在class
声明中有打印语句,但是将数据放在打印语句中,类声明肯定不是您想要的。
您可以正确地腌制,发送和接收对象,但是您的对象没有任何作用。
您大概想要的是一个具有共享数据类型的模块,然后客户端和服务器可以使用该类型进行通信。
我使用以下内容创建了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