Web-сервис на php-сокетах (сокет-сервер)

Статус
В этой теме нельзя размещать новые ответы.

despainer

Постоялец
Регистрация
15 Фев 2008
Сообщения
614
Реакции
167
Пишу чат-сервер на сокетах (тоесть не требующий web-сервера),но встала проблема: необходимо сделать так чтобы при обращении к серверу (порт 10000 на котором висит демон) броузером сервер выдавал web-страницу (тоесть примерно такое)-пример html-кода
<html>
<head><title>Тестовая страница</title>
</head>
<body>
<center><h1>Это тестовая страница</h1></center>
</body>
</html>


Естественно надо чтобы выдавался не код (как сейчас) а именно страница.

Проблема в том что я открываю сокет привязываю его к порту и IP и начинаю прослушивать сокет но при подключении клиента выводится белый экран при просмотре исходного кода показывается код который я приводил выше,при подключении я отправлял заголовки согласно стандарту HTTP (вроде) и код страниы но все равно код не выполняется..
Подскажите либо как правильно отправлять клиенту заголовки и код страницы чтоб он нормально выполнился,с поправкой на многопоточность.
 
может стоит отдавать правильный mime-type (text/html) ?
 
Добавь в начале
Код:
header("Content-Type: text/html; charset=utf-8");
 
Вот тебе реальный пример, ответ сервера нуледа
HTTP/1.x 200 OK
Server: nginx
Date: Tue, 09 Dec 2008 18:47:32 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
Cache-Control: private
Pragma: private
Content-Encoding: gzip
Content-Length: 22136
P.S. пот почитай еще вот это Для просмотра ссылки Войди или Зарегистрируйся
 
Так у меня также в примере,просто убраны необязательные строки.
 
Ну, если возвращается белый экран, значит какой-то тег все таки открылся.
 
Вот смотрите:
вот код:


При запуске скрипта и при попытке зацепится сервер выводит файл default (без расширения) и предлагает загрузить его.
Подскажите где в коде ошибка и приведите работающий пример!

Если цеплятся телнетом на порт 10000 то выводятся заголовки тут вроде все правильно.
Просьба гуру дать совет и привести пример работающего кода )))
 
Вот держи рабочий твой скриптик :)

PHP:
<?php

/**
 * @author DIAgen
 * @copyright 2008
 */

set_time_limit(0);

$SOCKET_ADDR = '127.0.0.1';
$SOcKET_PORT = '10000';
$SERVER_VERSIONS = 'Wellcom CHAT SERVER Designet';


$conhtmltagsmain["htzet"] = "HTTP/1.1 200 OK\nContent-Type: text/html\nConnection: clos";

$conhtmltagsmain["htmltags"] = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Wellcom CHAT SERVER Designet v.0.0.1</title>
</head>
<body>
HELLO!
</body>
</html>';


echo 'Create socket ... ';
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
    throw new Exception('socket_create() failed: ' . socket_strerror(socket_last_error()) . "\n");
} else {
    echo "OK\n";
}

echo 'Bind socket ... ';
if (($ret = socket_bind($sock, $SOCKET_ADDR, $SOcKET_PORT)) < 0) {
    throw new Exception('socket_bind() failed: ' . socket_strerror(socket_last_error
        ()) . "\n");
} else {
    echo "OK\n";
}

echo 'Listen socket ... ';
if (($ret = socket_listen($sock, 5)) < 0) {
    throw new Exception('socket_listen() failed: ' . socket_strerror(socket_last_error
        ()) . "\n");
} else {
    echo "OK\n";
}


while (1) {

    echo 'Accept socket ... ';
    if (($msgsock = socket_accept($sock)) < 0) {
        throw new Exception('socket_accept() failed: ' . socket_strerror(socket_last_error
            ()) . "\n");
    } else {
        echo "OK\n";
    }

    $tmp = @socket_read($msgsock, 1024, PHP_BINARY_READ);

    $msg = $conhtmltagsmain["htzet"] . "\n\n" . $conhtmltagsmain["htmltags"];
    echo "Say to client \n($msg) ... ";
    socket_write($msgsock, $msg, strlen($msg));
    echo "OK\n";


    socket_close($msgsock);
}

?>
 
и еще вопрос:а теперь как тоже самое завернуть в SSL?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху