Новичок
Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2014
Откуда: берутся дети?
Помог: 0 раз(а)
|
далаю скриптец для работы с сокетами, сострепал тестовый скрипт, все отлично работает, ное есть одно НО - подключится может только 1 пользователь, хотя в socket_listen прописано 10.
Вот код:
Спойлер (Отобразить)PHP:
скопировать код в буфер обмена
<?PHP define("DB_HOST", "localhost"); // Хост базы define("DB_USER", "root"); // Пользователь базы define("DB_PASS", "506038"); // Пароль от базы define("DB_BASE", "database"); // Имя базы /* Позволяет скрипту ожидать соединения бесконечно. */ /* Включает скрытое очищение вывода так что мы получаем данные * как только они появляются. */ $address = '*.*.*.*'; $port = 7781; $maxlistens = 10; $id = 0; if (($sock = socket_create(AF_INET , SOCK_STREAM , SOL_TCP )) === false) { }else{ echo "[SERVER]: socket_create() - [OK]\n"; } }else{ echo "[SERVER]: socket_bind() - [OK]\n"; } }else{ echo "[SERVER]: socket_listen() - [OK]\n"; } echo '[SERVER]: Socket server is started. Online users: '.$id."\n"; do { break; } /* Отправляем инструкции. */ $id++; $msg = "Welkome to 10.60.67.110. Date: ".date('d/m/Y')." | Time: ".date('H:i:s')."\r\nYour connect id: $id\r\nInsert '/help', to list commands\r\n[USER $id]# "; echo "[SERVER]: User id $id is connected \n"; do { if (false === ($buf = socket_read($msgsock, 2048 , PHP_NORMAL_READ ))) { break 2; } if (!$buf = trim($buf)) { continue; } if($buf == '/online'){ $talkback = "\r\nConnected users: $id\r\n"; }elseif(preg_match("/^\/dslam_search ([a-zA-Z0-9_\-]*)$/i", $buf)){ $msg = "\r\nPlease wait...\r\n"; $q = mysql_query("SELECT * FROM `shpd` WHERE `name` LIKE '%$search%'"); $talkback = "\r\n============================\r\nList DSLAM\r\n============================\r\n"; $talkback .= "ID: $row[id] | Name: $row[name] | Port: $row[port] | Status: $row[status] | User: $row[user] | VPN: $row[vpn]\r\n"; } $talkback .= "============================\r\nStatus: 1 - used, 0 - not used, 3 - armored\r\n"; $talkback .= "User: 1 - Legal, 0 - Physical, 3 - Not used\r\n"; $talkback .= "VPN: 1 - Yes, 0 - No\r\n"; $talkback .= "============================\r\n"; }else{ $talkback = "\r\nNot found\r\n"; } }elseif($buf == '/dslam_search'){ $talkback = "Used '/dslam_search DSLAM_NAME'\r\n"; }elseif(preg_match("/^\/dslam ([0-9]*)$/i", $buf)){ $msg = "\r\nPlease wait...\r\n"; $talkback = "\r\n============================\r\nList DSLAM\r\n============================\r\n"; $talkback .= "ID: $row[id] | Name: $row[name] | Port: $row[port] | Status: $row[status] | User: $row[user] | VPN: $row[vpn]\r\n"; } $talkback .= "============================\r\nTotal DSLAM: $c\r\n============================\r\n"; $talkback .= "============================\r\nStatus: 1 - used, 0 - not used, 3 - armored\r\n"; $talkback .= "User: 1 - Legal, 0 - Physical, 3 - Not used\r\n"; $talkback .= "VPN: 1 - Yes, 0 - No\r\n"; $talkback .= "============================\r\n"; }elseif($buf == '/dslam'){ $talkback = "Used '/dslam LIMIT'\r\n"; }elseif($buf == '/mktime'){ $talkback = "\r\nTime mark: ".time()."\r\n"; }elseif($buf == '/help'){ $talkback = "\r\n============================\r\nList commands\r\n============================\r\n"; $talkback .= "/online - Count connected users\r\n"; $talkback .= "/list_users - List database users\r\n"; $talkback .= "/dslam LIMIT - List DSLAM, LIMIT - limit show, numeric\r\n"; $talkback .= "/dslam_search DSLAM_NAME - Search DSLAM, DSLAM_NAME - name DSLAM, text\r\n"; $talkback .= "/mktime - Time mark\r\n"; $talkback .= "/help - List commands\r\n"; $talkback .= "/exit - close connection\r\n"; $talkback .= "\r\n============================\r\n"; }elseif($buf == '/list_users'){ $talkback = "\r\n============================\r\nList Users\r\n============================\r\n"; $talkback .= "ID: $row[id] | Login: $row[login] | Rank: $row[rank]\r\n"; } $talkback .= "============================\r\nTotal users: $c\r\n============================\r\n"; }elseif ($buf == '/exit') { echo "[SERVER]: Client id $id is disconected \n"; break; }elseif ($buf == 'close') { echo "[SERVER]: Client id $id is disconected and close server \n"; break 2; }else{ $talkback = "\r\nUnknow command '$buf'\r\n"; } echo "[CLIENT][id$id]: $buf \n"; $talkback .="[USER $id]# "; //echo "$buf\n"; } while (true); } while (true); ?>
Первый пользователь подключившийся водит приветственное сообщение и может свободно работать с сокетами, второй просто пустой экран, тестирую через стандартную утилиту telnet в MS WinXP. Сервер на WinServer 2003 (XAMPP)
Тестирую с разных пк в одной локальной сети.
|