gpt4 book ai didi

python - 通过套接字向服务器发送多个数据(文本和图像)

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:03 24 4
gpt4 key购买 nike

我用 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()

上面的代码运行良好,但我怎样才能发送比文件更多的数据呢? (二进制数据)

最佳答案

你看过“pickle”吗?使用 pickle 你可以序列化一个对象,比如你创建一个对象,比如字典:

    imageDict = {'imageFile': image, 'user': userName, 'fileName': file}

pickleData = pickle.dumps(imageDict)

s.send(pickleData)

现在在您的服务器上您可以解开数据:

l = sc.recv(1024)

imageDict = pickle.dumps(l)

现在,只要您等到所有数据都已收到,您就应该拥有一个字典,就像您在客户端创建的字典一样。

解释器中的示例:

>>> import pickle
>>> data = {'mac':4, 'mid':5}
>>> data
{'mac': 4, 'mid': 5}
>>> dataPickle = pickle.dumps(data)
>>> dataPickle
"(dp0\nS'mac'\np1\nI4\nsS'mid'\np2\nI5\ns."
>>> unpick = pickle.loads(dataPickle)
>>> unpick
{'mac': 4, 'mid': 5}
>>>

关于python - 通过套接字向服务器发送多个数据(文本和图像),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19551805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com