如何在python中通过套接字发送文件
我刚刚编写了一个小的客户机/服务器程序。为此,我使用了如何在python中通过套接字发送文件,python,python-3.x,sockets,tcpclient,sendfile,Python,Python 3.x,Sockets,Tcpclient,Sendfile,我刚刚编写了一个小的客户机/服务器程序。为此,我使用了python3的socket模块 我想知道如何不仅发送字符串,而且发送基本数据类型之外的其他数据类型。例如,像jpgs之类的图像,或者如何发送mp4或avis之类的图像,基本上是日常生活中使用的可视数据类型 我的第一个想法是将其编码为与字符串完全相同的代码: socket_name.send(bytes('string')) 但是我需要一个函数来将数据类型转换成字节并返回到服务器上,但我找不到一个提供此功能的函数 所以我搜索了其他函数,找到
python3
的socket
模块
我想知道如何不仅发送字符串,而且发送基本数据类型之外的其他数据类型。例如,像jpgs
之类的图像,或者如何发送mp4
或avis
之类的图像,基本上是日常生活中使用的可视数据类型
我的第一个想法是将其编码为与字符串完全相同的代码:
socket_name.send(bytes('string'))
但是我需要一个函数来将数据类型转换成字节并返回到服务器上,但我找不到一个提供此功能的函数
所以我搜索了其他函数,找到了sendfile
和makefile
。我试过了,但我找不到如何正确地使用它们,它不起作用
因此,我的问题只是如何通过
python3
中的socket
发送可视数据。首先,向我们展示您尝试过的代码,以及出现了什么问题,或者您在尝试使其工作时遇到了什么困难。您实际上不需要“将文件转换为字节”;只需以rb
模式打开文件,然后将其传递到socket.sendfile(f)
。另一方面,您只需在wb
模式下打开一个文件并循环buf=sock.recv(BUFSIZE);f、 写(buf)
直到完成。问题是:何时完成?如果您只想打开一个套接字,发送一个文件,然后关闭该套接字,并且希望服务器将其保存到某个随机命名的文件中,那么当客户端关闭该套接字时就完成了。但通常情况下,您需要构建一些简单的协议。例如,发送文件名、换行符、文件大小(作为人类可读的ASCII字符串)、换行符,然后发送文件本身。然后服务器知道该调用什么文件,当它读取完该文件并准备请求另一个文件时。无论如何,你真的需要一个关于基本网络协议的教程,而这太多了,在这么一个问题中写不出来,好的,谢谢你的帮助,我不知道第一次出了什么问题,可能只是文件路径或类似的东西。对我来说,仅仅发送一个文件然后存储就足够了。谢谢你,祝你度过愉快的一天。好吧,如果你有足够的代表性,你可以向上投票评论,但没什么作用。该系统旨在奖励答案,而不是评论。但是,除非你把它变成一个更具体的问题,比如显示你的makefile
尝试以及它出了什么问题,否则真的没有办法写出一个好的答案。但是如果你自己能弄明白,现在就要开始做实验,那么除了结束这个问题,真的没有什么可做的了。