python – 通过套接字将多个数据(文本和图像)发送到服务器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 通过套接字将多个数据(文本和图像)发送到服务器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2065字,纯文字阅读大概需要3分钟。
内容图文
![python – 通过套接字将多个数据(文本和图像)发送到服务器](/upload/InfoBanner/zyjiaocheng/786/af505efcc9754aeaa1b6f4f9355bfb0b.jpg)
我在python中创建了一个测试服务器,它通过套接字接收连接并保存png文件.但是,我想将一些其他数据传递给服务器,如文件的名称,发送它的用户等.但是我不能这样做,因为要接收数据,你必须通知你在缓冲区中读取的字节数.
我研究了很多,一些例子说使用struct并打包所有数据,但是一个图像到另一个图像的大小是不同的,我不能简单地制作一个结构格式,因为它对于我收到的每个文件都是不同的.
这是我到目前为止所做的工作:
服务器
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你可以序列化一个对象说你创建一个对象说一个字典:
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 – 通过套接字将多个数据(文本和图像)发送到服务器全部内容,希望文章能够帮你解决python – 通过套接字将多个数据(文本和图像)发送到服务器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。