标题:求助:我在用linux下用C编写HTTP服务端,发现传送mp3文件时程序崩溃情况。是 ...
取消只看楼主
waz525
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-5-20
 问题点数:0 回复次数:0 
求助:我在用linux下用C编写HTTP服务端,发现传送mp3文件时程序崩溃情况。是为什么?
我在用linux下用C编写HTTP服务端,发现传送mp3文件(大概5M)时程序崩溃情况。抓取报文分析是客户端发了FIN报文,应该是其关闭TCP连接导致。gdb也显示收到SIGPIPE信号。
但同样的文件,浏览器另存为时,数据传输正常。此程序浏览网页也是正常的。

传输文件的代码如下:

void SendHtmlContent(int client, char * path )
{
        FILE *resource ;
        char buf[1448];
        char ContentType[50] ;
        int len ;

        GetContentTypeByExName(path , ContentType ) ;
        //printf( "\tContentType : %s\n" , ContentType ) ;
        resource = fopen( path , "rb") ;

        //Get File Size
        fseek(resource, 0L, SEEK_END); // go to file end
        len = ftell(resource); //Get offset from head
        fseek(resource, 0L, SEEK_SET); // go to file head
        SendOkHeaders(client) ;

        sprintf(buf, "Content-Type: %s\r\n", ContentType);
        send(client, buf, strlen(buf), 0);
        sprintf(buf, "Accept-Ranges: bytes\r\nContent-Length: %d\r\n",len);
        send(client, buf, strlen(buf), 0);
        strcpy(buf, "\r\n");
        send(client, buf, strlen(buf), 0);
        len = fread( buf , sizeof(char) , sizeof(buf) , resource) ;
        while (len == sizeof(buf) )
        {
                if( ( rst = send(client, buf, len, 0) ) == -1 )
                {
                        len= -1 ;
                        break ;
                }

                len = fread( buf , sizeof(char) , sizeof(buf) , resource) ;
                //usleep(1000);

        }

        if( len > 0 )
        {
                send(client, buf, len, 0);
        }

        fclose(resource) ;
}

完整代码在https://
搜索更多相关主题的帖子: 浏览器 mp3文件 linux 服务端 客户端 
2015-05-20 12:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-445531-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019545 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved