I a*_*m L 0 python sockets network-programming client-server pickle
我在 python 中使用了 pickle 函数来解决套接字编程问题。但是我在服务器上收到的输出被打印为“< main .ProcessData instance at 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'
Run Code Online (Sandbox Code Playgroud)
客户
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'
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
服务器正在侦听..... 服务器正在侦听..... 连接者 ('127.0.0.1', 34726) < main .ProcessData 实例位于 0x7f8e2dfaaf80> 从客户端接收的数据
但我必须得到 ABCDEFGHIJ。我应该怎么办?
目前尚不清楚为什么在class声明中包含 print 语句,但是将数据放在 print 语句中,类声明肯定不是您想要的。
您正在正确地酸洗、发送和接收对象,但您的对象没有执行任何操作。
您可能想要的是某个具有共享数据类型的模块,然后客户端和服务器可以与该类型进行通信。
processdata.py我用以下内容创建:
class ProcessData:
def __init__(self, data= 'ABCDEFGHIJK'):
self.data = data
def __str__(self): return self.data
Run Code Online (Sandbox Code Playgroud)
然后修改你的代码:
客户
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'
Run Code Online (Sandbox Code Playgroud)
服务器
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'
Run Code Online (Sandbox Code Playgroud)
然后我得到
Server is Listening.....
Connected by ('127.0.0.1', 50941)
ABCDEFGHIJK
Data received from client
Run Code Online (Sandbox Code Playgroud)