serglt
Анус, ой, Ахтунг
Сокет чат. Браузер не выводит сообщения
Здравствуйте коллеги. Возникли проблемки при написании сокетного чата
Есть сервер чата на сокетах его код (точнее его наметки - тест версия):
<?
// socket_server.php
error_reporting (E_ALL);
set_time_limit (0);
if (($main_sock = socket_create (AF_INET, SOCK_STREAM, 0)) < 0)
die ("socket_create() failed: reason: " . socket_strerror ($main_sock));
if (($res = socket_bind ($main_sock, "localhost", 8080)) < 0)
die ( "socket_bind() failed: reason: " . socket_strerror ($res));
if (($res = socket_listen ($main_sock)) < 0)
die ("socket_listen() failed: reason: " . socket_strerror ($res));
$clients = array ();
while (true)
{
$msg = "";
if (($new_sock = socket_accept($main_sock)) < 0)
die ("socket_accept() failed: reason: " . socket_strerror ($new_sock));
$data = socket_read ($new_sock, 2048);
echo "\nOpen socket.. " . $new_sock . "\nSend: " . $data . "\nStr len: " . strlen ($data) . "\n";
if (substr ($data, 0, 4) == "SEND")
{
$msg = substr ($data, 4) . "\n";
socket_close ($new_sock);
echo "Closing socket.. " . $new_sock . "\n";
} else {
$clients [] = $new_sock;
echo "New client!\nClients count: " . count ($clients) . "\n";
}
if (strstr ($msg, "shutdown") !== false)
break;
foreach ($clients as $c)
{
echo "Write message.. " . $c . "\n";
socket_write ($c, $msg, strlen ($msg));
}
}
socket_close ($main_sock);
?>
Ниже HTML главной страницы: chat.php
<html>
<head>
<title>Chat</title>
</head>
<FRAMESET ROWS="*, 50" FRAMESPACING="0" NORESIZE>
<FRAME name="message" SRC="http://localhost:8080/" FRAMESPACING="0" NORESIZE>
<FRAME NAME="keyboard" SRC="keyboard.php?sid=SergLT" FRAMESPACING="0" SCROLLING="NO" NORESIZE>
</FRAMESET>
</html>
Как видим страничка состоит из двух фреймов: главного - куда пишутся сообщения сокетным процессом, и фреймом с формой для отправки сообщений ее исходный код:
<?
//keyboard.php
if (isset ($_POST ['msg']))
{
$h = fsockopen ("localhost", 8080);
fwrite ($h, "SEND [" . date ("H:i") . "]" . $_GET ['sid'] . ": " . $_POST ['msg'] . "<br>\n");
fclose ($h);
}
header ("Content-Type: text/html; charset=windows-1251;");
?>
<html>
<haed></head>
<body>
<form method="post" action="keyboard.php?sid=<?= $_GET ['sid'] ?>">
<input type="hidden" name="q" value="1">
<input name="msg" value="">
<input type="submit" name="send" value="ПАСЛАТЬ">
</form>
</body>
</html>
В общем возникла проблемка: посылаем сообщения на сервак (сообщения посылаются все намана) но когда сервак отсылает их мне обратно в окно главного фрейма - ничего не отображается
При отправке сообщения "shutdown" (Как видно из кода сервера - выход из вечного цикла) все сообщения появляются.
В чем может быть дело? Может кто подскажет? Заранее спасибо.
Здравствуйте коллеги. Возникли проблемки при написании сокетного чата
Есть сервер чата на сокетах его код (точнее его наметки - тест версия):
<?
// socket_server.php
error_reporting (E_ALL);
set_time_limit (0);
if (($main_sock = socket_create (AF_INET, SOCK_STREAM, 0)) < 0)
die ("socket_create() failed: reason: " . socket_strerror ($main_sock));
if (($res = socket_bind ($main_sock, "localhost", 8080)) < 0)
die ( "socket_bind() failed: reason: " . socket_strerror ($res));
if (($res = socket_listen ($main_sock)) < 0)
die ("socket_listen() failed: reason: " . socket_strerror ($res));
$clients = array ();
while (true)
{
$msg = "";
if (($new_sock = socket_accept($main_sock)) < 0)
die ("socket_accept() failed: reason: " . socket_strerror ($new_sock));
$data = socket_read ($new_sock, 2048);
echo "\nOpen socket.. " . $new_sock . "\nSend: " . $data . "\nStr len: " . strlen ($data) . "\n";
if (substr ($data, 0, 4) == "SEND")
{
$msg = substr ($data, 4) . "\n";
socket_close ($new_sock);
echo "Closing socket.. " . $new_sock . "\n";
} else {
$clients [] = $new_sock;
echo "New client!\nClients count: " . count ($clients) . "\n";
}
if (strstr ($msg, "shutdown") !== false)
break;
foreach ($clients as $c)
{
echo "Write message.. " . $c . "\n";
socket_write ($c, $msg, strlen ($msg));
}
}
socket_close ($main_sock);
?>
Ниже HTML главной страницы: chat.php
<html>
<head>
<title>Chat</title>
</head>
<FRAMESET ROWS="*, 50" FRAMESPACING="0" NORESIZE>
<FRAME name="message" SRC="http://localhost:8080/" FRAMESPACING="0" NORESIZE>
<FRAME NAME="keyboard" SRC="keyboard.php?sid=SergLT" FRAMESPACING="0" SCROLLING="NO" NORESIZE>
</FRAMESET>
</html>
Как видим страничка состоит из двух фреймов: главного - куда пишутся сообщения сокетным процессом, и фреймом с формой для отправки сообщений ее исходный код:
<?
//keyboard.php
if (isset ($_POST ['msg']))
{
$h = fsockopen ("localhost", 8080);
fwrite ($h, "SEND [" . date ("H:i") . "]" . $_GET ['sid'] . ": " . $_POST ['msg'] . "<br>\n");
fclose ($h);
}
header ("Content-Type: text/html; charset=windows-1251;");
?>
<html>
<haed></head>
<body>
<form method="post" action="keyboard.php?sid=<?= $_GET ['sid'] ?>">
<input type="hidden" name="q" value="1">
<input name="msg" value="">
<input type="submit" name="send" value="ПАСЛАТЬ">
</form>
</body>
</html>
В общем возникла проблемка: посылаем сообщения на сервак (сообщения посылаются все намана) но когда сервак отсылает их мне обратно в окно главного фрейма - ничего не отображается

При отправке сообщения "shutdown" (Как видно из кода сервера - выход из вечного цикла) все сообщения появляются.
В чем может быть дело? Может кто подскажет? Заранее спасибо.
Спасибо.