可以使用 Python 中的 Pickle 和 socket 模块将数据对象从客户端发送到服务器吗?
Can send data objects from client to server using the Pickle and socket modules in Python?
我想让我的客户端程序将对象发送到服务器。通过搜索互联网,在所有示例中,我都看到数据对象由服务器发送到客户端,但我想做相反的事情。下面我将共享客户端代码和服务器代码。我已经能够修改套接字客户端代码,但我很难修改服务器代码。因为,我是 python 编程的新手,而且我在截止日期前,非常感谢您的帮助。
代码如下:
服务器代码::
import socket
def server_program():
# get the hostname
host = socket.gethostname()
port = 5000 # initiate port no above 1024
server_socket = socket.socket() # get instance
# look closely. The bind() function takes tuple as argument
server_socket.bind((host, port)) # bind host address and port together
# configure how many client the server can listen simultaneously
server_socket.listen(2)
conn, address = server_socket.accept() # accept new connection
print("Connection from: " + str(address))
while True:
# receive data stream. it won't accept data packet greater than 1024 bytes
data = conn.recv(1024).decode()
if not data:
# if data is not received break
break
print("from connected user: " + str(data))
data = input(' -> ')
conn.send(data.encode()) # send data to the client
conn.close() # close the connection
if __name__ == '__main__':
server_program()
这里是用pickle修改的客户端代码::
import socket
import pickle
def client_program():
host = socket.gethostname() # as both code is running on same pc
port = 5000 # socket server port number
client_socket = socket.socket() # instantiate
client_socket.connect((host, port)) # connect to the server
message = input(" -> ") # take input
while message.lower().strip() != 'bye':
client_socket.send(message.encode()) # send message
#data = client_socket.recv(1024).decode() # receive response
#print('Received from server: ' + data) # show in terminal
wastebin_attr = {1:"Wastebin_serial_number", 2:"Wastebin_type", 3:"Status" , 4:"Action", 5:"Zone", 6:"Latitude", 7:"Longitude"}
mssg = pickle.dumps(wastebin_attr)
print("from connected user: " + mssg)
message = input(" -> ") # again take input
client_socket.close() # close the connection
if __name__ == '__main__':
client_program()
使用 pickle 模块将数据从客户端发送到服务器:
data = pickle.dumps(data)
client_socket.send(data)
要在最终使用的服务器上接收数据:
data = conn.recv(1024)
data = pickle.loads(data)
您还可以使用它通过切换 client_socket 和连接部分
从服务器发送到客户端
我想让我的客户端程序将对象发送到服务器。通过搜索互联网,在所有示例中,我都看到数据对象由服务器发送到客户端,但我想做相反的事情。下面我将共享客户端代码和服务器代码。我已经能够修改套接字客户端代码,但我很难修改服务器代码。因为,我是 python 编程的新手,而且我在截止日期前,非常感谢您的帮助。
代码如下:
服务器代码::
import socket
def server_program():
# get the hostname
host = socket.gethostname()
port = 5000 # initiate port no above 1024
server_socket = socket.socket() # get instance
# look closely. The bind() function takes tuple as argument
server_socket.bind((host, port)) # bind host address and port together
# configure how many client the server can listen simultaneously
server_socket.listen(2)
conn, address = server_socket.accept() # accept new connection
print("Connection from: " + str(address))
while True:
# receive data stream. it won't accept data packet greater than 1024 bytes
data = conn.recv(1024).decode()
if not data:
# if data is not received break
break
print("from connected user: " + str(data))
data = input(' -> ')
conn.send(data.encode()) # send data to the client
conn.close() # close the connection
if __name__ == '__main__':
server_program()
这里是用pickle修改的客户端代码::
import socket
import pickle
def client_program():
host = socket.gethostname() # as both code is running on same pc
port = 5000 # socket server port number
client_socket = socket.socket() # instantiate
client_socket.connect((host, port)) # connect to the server
message = input(" -> ") # take input
while message.lower().strip() != 'bye':
client_socket.send(message.encode()) # send message
#data = client_socket.recv(1024).decode() # receive response
#print('Received from server: ' + data) # show in terminal
wastebin_attr = {1:"Wastebin_serial_number", 2:"Wastebin_type", 3:"Status" , 4:"Action", 5:"Zone", 6:"Latitude", 7:"Longitude"}
mssg = pickle.dumps(wastebin_attr)
print("from connected user: " + mssg)
message = input(" -> ") # again take input
client_socket.close() # close the connection
if __name__ == '__main__':
client_program()
使用 pickle 模块将数据从客户端发送到服务器:
data = pickle.dumps(data)
client_socket.send(data)
要在最终使用的服务器上接收数据:
data = conn.recv(1024)
data = pickle.loads(data)
您还可以使用它通过切换 client_socket 和连接部分
从服务器发送到客户端