while(!$abort){ $num_changed = socket_select($read, $NULL, $NULL, 0, 10); /* Изменилось что-нибудь? */ if ($num_changed){ /* Изменился ли главный сокет (новое подключение) */ if(in_array($creat, $read)){ if(count($sockets_clients) < $max_clients){ $sockets_clients[]= socket_accept($creat); echo " Accept socket (" . count($sockets_clients) . " of $max_clients clients)\n"; // socket_write($sockets_clients[count($sockets_clients)-1], "Hello, Client!", 15); echo " Say to ".count($sockets_clients)." client: Hello, Client!\n"; } } /* Цикл по всем клиентам с проверкой изменений в каждом из них */ foreach($sockets_clients as $key => $client){
/* Новые данные в клиентском сокете? Прочитать и ответить */ if(in_array($client, $read)){ $input = socket_read($client, 1024);
$read = $sockets_clients; $read[] = $creat; } // END WHILE ?>
Client.fla На временной шкале создадим два слоя - первый с названием action в нём напишем код, второй – sqrs в нем будут находиться квадраты. В слой sqrs добавьте два квадрата, преобразуйте их в символы и в свойствах назначьте имена экземплярам: первый - sqr и второй - sqr_i, задайте им размер и положение, я делал так – размер 50*50, положение – (25;25). Далее добавьте код в слой action.
Code
/* connect to socket */ var socket = new Socket("localhost", 1024); socket.connect; socket.flush;
/* state of connect to socket */ socket.addEventListener(Event.CONNECT,socketConnected); function socketConnected(e:Event):void{ trace("client - socket connected", socket.connected); }
/* read the string from the socket*/ socket.addEventListener(ProgressEvent.SOCKET_DATA,socketData); function socketData(e:ProgressEvent):void{ var x1=''; var y1=''; var read_socket=socket.readUTFBytes(socket.bytesAvailable); if (read_socket.indexOf('x')==0){ for (var i=1; i<read_socket.length; i++){ x1=x1+read_socket.charAt(i); } sqr.x=Number(x1); } if (read_socket.indexOf('y')==0){ for (i=1; i<read_socket.length; i++){ y1=y1+read_socket.charAt(i); } sqr.y=Number(y1); } trace(read_socket); }
/*Move to sqr*/ var speed:Number = 5; stage.addEventListener(KeyboardEvent.KEY_DOWN, downn);
/*sqr.addEventListener(Event.ENTER_FRAME, sqr_move); function sqr_move(e:Event): void{ sqr.y=Number(socket.readUTFBytes(socket.bytesAvailable)); }*/
/*close to socket*/ socket.close;
Ну вот на сегодня и всё. Код, в принципе, прокомментирован, путём вывода на экран вспомогательного сообщения, так же имена переменных помогут ориентироваться, если какие-то части не понятны – обращайтесь. Ещё раз повторяю урок НЕ ДЛЯ НОВИЧКОВ, поэтому код прокомментирован НЕСИЛЬНО. Давайте же протестируем наш сокет клиент/сервер – зайдите на страницу server.php и откройте client.swf два раза.
В результате получится что-то вроде этого. Исходник. Данная «игра» далеко не безупречна, но принцип, думаю, ясен, дальше доделывайте сами.
На этом всё, данная серия уроков окончена, хотя возможно дам тестовый урок. Спасибо за внимание! Удачи в изучении!
Сообщение отредактировал anton-gar - Понедельник, 12 Марта 2012, 14:41
Rise of Nation, Rise and fall - люблю проиграть в эти игры с друзьями, как по сети или интернету, так и с ии. Властелин колец тоже, в принципе, ничего.
Добавлено (11.03.2012, 20:13) --------------------------------------------- Я тоже очень люблю стратегии, а вот друзей с похожими интересами маловато.
Зачем вообще делать и клиент, и сервер на php? Зачем писать бесполезный урок? Я даже не вижу, где это может применяться.
Quote (anton-gar)
Введение, общее понятие. • Урок первый – Написание простейшего «echo-(эхо)» сокет клиента/сервера на php.
Quote (anton-gar)
И писать что-то вроде «Да кому нужен сервер на php» не стоит, раз урок написан – значит кому-то нужен!)
А так - что бы проверить работу сервера. --------------------------------------------- Да, этот урок был не самый, но для общего понятия подойдёт. Думаю, последующие будут гораздо интересней и нужней!
Добавлено (09.03.2012, 11:58) --------------------------------------------- Добавлен второй урок. --------------------------------------------- Добавлено видео 3 урока.
Сообщение отредактировал anton-gar - Пятница, 09 Марта 2012, 15:30
Присоединяюсь ко всем поздравлениям! От себя, конечно же, хочется добавить: Исполнения всех желаний, И пусть все мечты станут реальностью. Пусть сгинут бури и ненастья, Уйдут пускай навеки в тень. Я Вам желаю только счастья В Ваш самый добрый, светлый день!