使用python套接字将文件名从客户端发送到服务器
在我的代码中,我将一个图像从客户端发送到服务器。一切都很好,但当我尝试将图像的文件名从服务器发送到客户端时,我一直在等待,没有收到任何错误。 这是我的密码: 客户:使用python套接字将文件名从客户端发送到服务器,python,web-services,sockets,websocket,Python,Web Services,Sockets,Websocket,在我的代码中,我将一个图像从客户端发送到服务器。一切都很好,但当我尝试将图像的文件名从服务器发送到客户端时,我一直在等待,没有收到任何错误。 这是我的密码: 客户: import socket import pickle host = socket.gethostname() port = 5000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((host , port)) f = open("te
import socket
import pickle
host = socket.gethostname()
port = 5000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host , port))
f = open("test.png", "rb")
while True:
veri = f.read()
if not veri:
break
s.send(veri)
f.close()
print "image successfully sent"
data = s.recv(1024)
#data_arr=pickle.loads(data)
print "data recieved is :",data
s.close()
服务器:
import socket
import pickle
from PIL import Image
import os
host = socket.gethostname()
port = 5000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(5)
client , adress = s.accept()
print "successfully connected to",adress
f = open("server.png", "wb")
while True:
veri = client.recv(1024)
if not veri:
break
f.write(veri)
f.close()
print "image recieved successfully"
T= os.path.abspath(f.name)
print "the path of the image is ",T
#data=pickle.dumps(T)
client.send(T)
print "binary data sent"
client.close()
由于使用了相同的通道,我认为在读取图像数据时会读取文件名。用十六进制编辑器检查png文件(结尾)以确认这一点。您必须首先发送图像的大小,以便只读取所需的字节,这样它就不会读取包含其余数据的文件名。我认为这个问题与文件名无关,我尝试了client.send(str(9))我得到了同样的结果,你必须以二进制的形式发送大小(如果大小固定的话),然后读取相同数量的字节来获得另一端的大小。然后您就知道要为图像和文件名读取多少字节。首先发送包含大小的“标题”,然后发送数据,以便接收者知道每个对象要读取多少数据。