Как отправить HTTP-ответ с использованием фрагментированного кодирования?

Привет всем, я пытаюсь передавать мультимедийные данные с использованием фрагментированного кодирования. Итак, я впервые попробовал свои силы в отправке текстовых данных с использованием фрагментированного кодирования.

Вот мой код. Я создал сокет сервера, на котором я слушаю запрос (порт 80), отвечаю на запрос, а затем моя программа завершается. Что бы вы ни попросили, вы всегда получите один и тот же ответ. На моей машине я отправляю "http://localhost/anirudh.html" в качестве запроса из браузера. Вывод показывает, что пакеты отправляются, но в браузере ничего не отображается. Я где-то ошибаюсь, и, поскольку я не знаю, как правильно отправить ответ, используя кодировку по частям, я не могу понять ошибку.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<fcntl.h>

int main(){

    struct sockaddr_in sockserv,sockclient;
    int socketfd,clientfd;
    socklen_t clientsocklen;
    int filefd;
    int finalcnt = 0;

    char buff[BUFSIZ];

    socketfd = socket(AF_INET,SOCK_STREAM,0);   
    printf("Socket Creation: %s\n",strerror(errno));

    bzero(&sockserv,sizeof(sockserv));

    sockserv.sin_family = AF_INET;
    sockserv.sin_addr.s_addr = INADDR_ANY;
    sockserv.sin_port = htons(80);

    bind(socketfd,(struct sockaddr *)&sockserv,sizeof(sockserv));
    printf("Socket Bind: %s\n",strerror(errno));

    listen(socketfd,10);
    printf("Socket Listen: %s\n",strerror(errno));

    clientfd = accept(socketfd,(struct sockaddr*)&sockclient,&clientsocklen);
    printf("request accepted\n");

    buff[read(clientfd,buff,BUFSIZ)] = '\0';
    printf("Request recieved as \n%s\n",buff);  

    sprintf(buff,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nDate: Mon, 28 Feb 2011 10:38:19 GMT\r\nTransfer-Encoding: chunked\r\nServer: Myserver\r\n\r\n%x\r\n%s\r\n0\r\n",strlen("<html><body><p> HI I am anirudh tomer </p> </body></html>"),"<html><body><p> HI I am anirudh tomer </p> </body></html>");

    printf("\n\nREPLY TO THE CLIENT\n\n%s\n\n",buff);

    finalcnt = send(clientfd,buff,strlen(buff),0);  
    printf("Sent %d bytes to the client : %s\n",finalcnt,strerror(errno));

    close(clientfd);
    close(socketfd);

    return 0;
}

вот ответ:

anirudh@anirudh-Aspire-5920:~/Desktop/testing$ gcc test.c
anirudh@anirudh-Aspire-5920:~/Desktop/testing$ sudo ./a.out
Socket Creation: Success
Socket Bind: Success
Socket Listen: Success
request accepted
Request recieved as 
GET /avashjfvjhaasadjfasafa.ogg HTTP/1.1
Host: localhost
Connection: keep-alive
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.98 Safari/534.13
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3




REPLY TO THE CLIENT

HTTP/1.1 200 OK
Content-Type: text/html
Date: Mon, 28 Feb 2011 10:38:19 GMT
Transfer-Encoding: chunked
Server: Myserver

39
<html><body><p> HI I am anirudh tomer </p> </body></html>
0


Sent 193 bytes to the client : Success
anirudh@anirudh-Aspire-5920:~/Desktop/testing$

Пожалуйста, помогите мне. Заранее спасибо.


person Durin    schedule 28.02.2011    source источник


Ответы (1)


В вашем ответе отсутствует окончательная последовательность CRLF. Добавление дополнительного \r\n к ответу должно исправить это.

person Hasturkun    schedule 28.02.2011
comment
спасибо, что указали на эту ошибку. Если вам интересно, посмотрите этот stackoverflow.com/questions/5151847/, а также - person Durin; 01.03.2011