Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Sockets_Http_Web_Server - Fatal编程技术网

使用python套接字编程将文件发送到浏览器

使用python套接字编程将文件发送到浏览器,python,sockets,http,web,server,Python,Sockets,Http,Web,Server,我正在尝试使用python(仅限socket编程)向客户端(浏览器:Chrome)发送一个文件(mp3)。我的问题是,文件正在下载,而不是在浏览器上进行流式传输。我无法理解我错在哪里。请让我知道 另外,下载的音频文件没有损坏,我可以播放音频 这是我的密码: import socket import os import time from encodings.base64_codec import base64_encode serversocket = socket.socket(socket.

我正在尝试使用python(仅限socket编程)向客户端(浏览器:Chrome)发送一个文件(mp3)。我的问题是,文件正在下载,而不是在浏览器上进行流式传输。我无法理解我错在哪里。请让我知道

另外,下载的音频文件没有损坏,我可以播放音频

这是我的密码:

import socket
import os
import time
from encodings.base64_codec import base64_encode
serversocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
port=8000

def createServer():

   serversocket.bind(("",port))
   serversocket.listen(5)
   file=open('music.mp3',"rb")
   z=file.read()
   var=len(z)
   file.close()
   (clientsocket, address) = serversocket.accept()
   clcommand=clientsocket.recv(1024).decode('utf8')

   header="HTTP/1.1 200 OK"
   header1="Content-Type: audio/mpeg"
   header2="Content-Length: {}".format(var)
   blank="\r\n"

   sendt=header+header1+header2+blank
   clientsocket.send(sendt.encode())

   file=open("music.mp3",'rb')
   z=file.read(512)
   while (z):
     try:

        clientsocket.send(z)
        z=file.read(512)

     except:
        print("done sending")
        exit()

createServer()

通过在浏览器上显示音频文件,您能做些什么?您使用的是哪个浏览器?我的意思是在浏览器上播放音频文件,我使用的是Chrome。
sendt=header+header1+header2+blank
。。。标题行还需要
\r\n
分隔符-包括最后一个分隔符,以便在内容之前有一个
\r\n\r\n
。此外,使用
sendall
而不是
send
,因为
send
不能保证发送您要求发送的所有内容。此外,您还可以编写一个小python脚本,让客户端而不是浏览器来查看您得到了什么。通过在浏览器上显示音频文件,您做了什么?您使用的是哪个浏览器?我的意思是在浏览器上播放音频文件,我使用的是Chrome。
sendt=header+header1+header2+blank
。。。标题行还需要
\r\n
分隔符-包括最后一个分隔符,以便在内容之前有一个
\r\n\r\n
。此外,使用
sendall
而不是
send
,因为
send
不能保证发送您要求发送的所有内容。此外,您还可以编写一个小python脚本,让客户端而不是浏览器看到您得到了什么。