我在 python 中创建了一个测试服务器,它通过套接字接收连接并保存 png 文件。但是,我想将一些其他数据传递给服务器,例如文件名、发送它的用户等。但我不能这样做,因为要接收数据,您必须告知您正在缓冲区中读取的字节数。
我研究了很多,一些例子说使用结构并打包所有数据,但是一个图像的大小与另一个图像的大小不同,我不能简单地制作一个结构格式,因为我收到的每个文件都会有所不同。
这是我到目前为止所做的工作:
服务器
import socket
import os
import sys
FilePath = os.path.realpath(os.path.dirname(sys.argv[0]))
s = socket.socket()
s.bind(("localhost",8000))
s.listen(5) #Tipo, 5 conexoes no maximo {ao mesmo tempo}
i=0
name = 'file_'
while (True):
sc, address = s.accept()
name = 'file_%s' % i
f = open(os.path.join(FilePath,'server_received/%s.png'% name) ,'wb') #open as binary data
i=i+1
# receives and writes the file
l = sc.recv(1024)
while (l):
f.write(l)
l = sc.recv(1024)
f.close()
sc.close()
s.close()
客户
class SendToServer(Thread):
def __init__(self, queue, *args, **kwargs):
Thread.__init__(self)
self.queue = queue
self.args = args
self.kwargs = kwargs
def run(self):
try:
while not self.queue.empty():
s = socket.socket()
s.connect((HOST,PORT))
file_path = self.queue.get()
file = open(file_path,'rb')
s.send(file_path)
l = file.read(1024)
while l:
s.send(l)
l = file.read(1024)
self.queue.task_done()
s.close()
print u"Enviado"
except:
print u"Sem conexao"
#This i Use when I call the Thread:
sync= SendToServer(queue)
sync.run()
上面的代码运行良好,但我怎样才能发送比文件更多的数据呢?(二进制数据)