通过TCP服务器

时间:2016-09-22 13:40:42

标签: node.js sockets http tcp mp3

我试图通过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

问题在于我想将歌曲作为流媒体提供,但我不知道如何处理请求以及如何设置正确的标题。

这是示例请求的快照: enter image description here

正如您在服务器代码中看到的那样,响应是使用socket.write编写的,这是在data事件处理程序中触发的,我可以访问有关请求的数据信息。这是第一个(有两个)请求数据的快照:

enter image description here

0 个答案:

没有答案