Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中通过套接字发送文件_Python_Python 3.x_Sockets_Tcpclient_Sendfile - Fatal编程技术网

如何在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
尝试以及它出了什么问题,否则真的没有办法写出一个好的答案。但是如果你自己能弄明白,现在就要开始做实验,那么除了结束这个问题,真的没有什么可做的了。