leosun
Новичок
Сокеты и поточность
Господа - такая проблема при работе с сокетами данные принимаются ото всех подключний а отдается только тому пользователю который первым установил соединение, когда он отрубается следующему отдается информация...
Господа - такая проблема при работе с сокетами данные принимаются ото всех подключний а отдается только тому пользователю который первым установил соединение, когда он отрубается следующему отдается информация...
PHP:
<?php
include("./db.php");
error_reporting (E_ALL);
/* Разрешить скрипту зависнуть в ожидании соединений. */
set_time_limit (0);
/* Включить неявную очистку вывода, и мы увидим всё получаемое
* по мере поступления. */
ob_implicit_flush ();
$address = '17.412.43.118';
$port = 6779;
if (($sock = socket_create (AF_INET, SOCK_STREAM, 0)) < 0) {
echo "socket_create() failed: reason: " . socket_strerror ($sock) . "\n";
}
if (($ret = socket_bind ($sock, $address, $port)) < 0) {
echo "socket_bind() failed: reason: " . socket_strerror ($ret) . "\n";
}
if (($ret = socket_listen ($sock, 5)) < 0) {
echo "socket_listen() failed: reason: " . socket_strerror ($ret) . "\n";
}
do {
if (($msgsock = socket_accept($sock)) < 0) {
echo "socket_accept() failed: reason: " . socket_strerror ($msgsock) . "\n";
break;
}
$msg = "\nWelcome to the PHP Test Server. \n" .
"To quit, type 'quit'. To shut down the server type 'shutdown'.\n";
socket_write($msgsock, $msg, strlen($msg));
do {
if (FALSE === ($buf = @socket_read ($msgsock, 2048, PHP_NORMAL_READ))) {
echo "socket_read() failed: reason: " . socket_strerror ($ret) . "\n";
break 2;
}
if (!$buf = trim ($buf)) {
continue;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'shutdown') {
socket_close ($msgsock);
break 2;
}
if (preg_match("#(login):(.*):(.*)#i",$buf,$matches)){
$login = addslashes($matches[2]);
$passwd = $matches[3];
$sql = "SELECT uid FROM `users` WHERE `login` = '$login' AND `pw` = '".md5($passwd)."'";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0)
{
list($uid) = mysql_fetch_array($result);
}
else {
$talkback = 'ERROR_AUTH';
socket_write ($msgsock, $talkback, strlen ($talkback));
}
//$talkback = $sql;
}
} while (true);
socket_close ($msgsock);
} while (true);
socket_close ($sock);
?>