Web Server不向每个浏览器提供音频文件

时间:2016-06-25 00:21:40

标签: c web server

以下是我在C和Internet Explorer中创建的Web服务器之间的通信。一切都是服务但音频文件。有关为什么只提供音频的任何见解?

GET /castle/media/witchwoode.m4a HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept: */*
Referer: http://127.0.0.1:6006/castle/index.html
GetContentFeatures.DLNA.ORG: 1
Pragma: getIfoFileURI.dlna.org
Accept-Language: en-US
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:6006
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: web
Content-Length: 3017451
Connection: close
Content-Type: audio/mp4

2 个答案:

答案 0 :(得分:0)

如果我从techslides下载示例m4a文件,我会收到以下响应:

  HTTP/1.1 200 OK
  Server: nginx/1.4.1 (Ubuntu)
  Date: Sat, 25 Jun 2016 02:35:31 GMT
  Content-Type: audio/mpeg
  Content-Length: 34535
  Last-Modified: Sun, 16 Feb 2014 18:49:36 GMT
  Connection: keep-alive
  ETag: "53010840-86e7"
  Accept-Ranges: bytes

如您所见:不同的内容类型和连接。

BTW:Firefox说了一个有关损坏文件的内容,但是带有上述地址的Chrome和带有下载文件的独立播放器(mplayer)工作得很好,所以在你讨厌代码之前,请尝试更改协议

答案 1 :(得分:0)

好吧,它无法正常工作。以下是我认为存在问题的代码的一部分。

范围,是一个确定何时找到“范围”的int ctype ,基于GET中的文件扩展名。
标题,用于保存标题的缓冲区 out ,用于发送到浏览器的数据的malloced内存 out2 ,用于保存标题输出的malloced内存然后发送。
isize ,是 out 的整数。
datasize isize 的字符串表示。

if ( range == 0 )
{                            
    strcpy(header,"HTTP/1.1 200 OK\r\nServer: web\r\nContent-Type: ");
}
else
{
    strcpy(header,"HTTP/1.1 200 OK\r\nServer: web\r\nAccept-Ranges: none\r\nContent-Type: ");
}                            
strcat(header,ctype);
strcat(header,"\r\nContent-Length: ");
strcat(header,datasize);
strcat(header,"\r\nConnection: close\r\n\r\n");
printf("%s",header);
printf("\nlength of header: %d\n", strlen(header));                           
out2 = malloc( sizeof(char)*(isize+1+strlen(header)) ); 
memcpy(out2,header,strlen(header));
memcpy(&out2[strlen(header)],out,isize);
free(out);

send(sd,out2,isize+strlen(header),0);
free(out2);