LINUX.ORG.RU

http


0

0

Доброго времени суток. Нужно срочно написать простенький web-сервер (лаба такая, горю!!!) на Сях через сокеты. Первое, что делаю после того как браузер соединится - вывожу, что он выдает. Вот оно: GET / HTTP/1.1 Host: 82.179.20.15:2048 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8 ,image/png,*/*;q=0.5 Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive

Вопрос!!! Что нужно отправить браузеру через тот же сокет, чтобы он вывел замысловатое "Hello world!" ???


Гм. Детка, ты учиться не пробовало?

Miguel ★★★★★
()

например такое:

HTTP/1.1 200 OK
Date: Wed, 19 Dec 2007 21:12:08 GMT
Server: Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.8d DAV/2 PHP/5.2.0
X-Powered-By: PHP/5.2.0
Content-Length: 49
Content-Type: text/html

<html>
<body>
<h1>It works!</h1>
</body>
</html>

а вообще google://http+rfc

generatorglukoff ★★
()
Ответ на: комментарий от generatorglukoff

Проповал.... не работает! Делел так:

char *accept_ok = "HTTP/1.1 200 OK\
    Date: Wed, 19 Dec 2007 21:12:08 GMT\
    Server: Apache/2.2.4 (Unix) mod_ssl/2.2.4 OpenSSL/0.9.8d DAV/2 PHP/5.2.0\
    X-Powered-By: PHP/5.2.0\
    Content-Length: 49\
    Content-Type: text/html\
\
    <html>\
    <body>\
    <h1>It works!</h1>\
    </body>\
    </html>\
    Connection: close\
";
 cli_sock=accept(serv_sock, (struct sockaddr *) &cli_addr, &size);
        if((pid=fork())==0)
        {
            close(serv_sock);
            while(1)
            {
                len=recv(cli_sock, buf, 1024, 0);
                printf("+++len+++ %d\n%s\n", len, buf);
                if(len==0 || len==-1) break;

            }
            printf("\n while done! \n");
            len=send(cli_sock, accept_ok, strlen(accept_ok), 0);
            close(cli_sock);
            exit(0);
        }
        else
        {
            wait(&status);
        }


Что еще мне более не понятно - строка "while done"
выводится только после того как в браузере нажмеш "стоп", с другой
стороны recv выводит только 1 раз всю эту лабуду про браузер

Вот...

demix
() автор топика

Оно у тебя работать не будет ибо выход по len == 0 или ошибке.

Для начала найди реализацию функции, которая считывает строку из потока.

Молодец, парень, продолжай и из тебя вырастет новый Билл Гейтс.

Macil ★★★★★
()
Ответ на: комментарий от Macil

Про Гейтса, конечно, обидно, а за остальное спасибо. Все заработало!

demix
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.