我试图通过TCP服务器提供mp3文件,只是添加一些标头来模拟HTTP服务器。我目前使用的标题是:
var header = `HTTP/1.1 206 Partial Content\r\nContent-Type: audio/mpeg\r\nContent-Length: ${fileStat.size}\r\n'Cache-Control: no-cache'\r\nConnection: keep-alive\r\nLast-Modified: ${date.toGMTString()}\r\n\r\n`
我创建服务器的方式:
let server = net.createServer((socket) => {
socket.on('data', (data) => {
socket.write(Buffer(header, 'ascii'))
RNFetchBlob.fs.readStream('/storage/sdcard1/Music/elpisito.mp3', 'ascii')
.then((stream) => {
stream.open()
stream.onData((chunk) => {
socket.write(Buffer(chunk, 'ascii'))
})
stream.onEnd(() => {
socket.end()
})
})
}
})
socket.on('error', (error) => {
console.log('error ' + error)
})
}).listen(serverPort, '0.0.0.0', () => {
console.log('opened server on ' + JSON.stringify(server.address()))
})
如果我没有发送任何标题(我删除了socket.write(Buffer(header, 'ascii'))
),我会使用如下示例请求下载该文件:
http://192.168.0.12:65000/song.mp3
问题在于我想将歌曲作为流媒体提供,但我不知道如何处理请求以及如何设置正确的标题。
正如您在服务器代码中看到的那样,响应是使用socket.write
编写的,这是在data
事件处理程序中触发的,我可以访问有关请求的数据信息。这是第一个(有两个)请求数据的快照: