null_kamaz
Junior Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору вобщем,есть демон на php и клиентская часть на flash'е пытаюсь их заставить работать друг с другом через сокетное соединение проблема в том, что флэш к серваку конектицца, но ничё не хочет принимать/отправлять использую XMLSocket если к серваку приконектицца телнетом, то всё ok, команды хавает, отвечает, а flash не хочет не подскажите в чём дело? вот код php: Цитата: <? //error_reporting (E_ALL); set_time_limit (0); $address = '127.0.0.1'; $port = 10000; /* Показать ошибку */ function error_() { send_all ("<err txt=".socket_strerror(socket_last_error()),"/err>"); } /* Показать ошибку и вырубицца */ function fatal_error_() { error_(); die(); } /* Отправить одному клиенту */ function send_single($sockr, $message) { /* Конвертим в cp866 кодировку, шобы telnet'ом русский понимать */ // $message=iconv("WINDOWS-1251", "CP866", $message); socket_write($sockr, "$message"); } /* Отправить всем клиентам, или всем кроме одного */ function send_all($message, $one) { global $clients; foreach ($clients as $xsock) if ($xsock!=$one) send_single($xsock, $message); } function kill_client($sock) { global $clients, $data; send_all("<del ip=".$data[$sock]['IP']." /del>".chr(0), $sock); unset($clients[$sock]); unset($data[$sock]); socket_close ($sock); } /* создаём Lсокет */ if (!($Lsock = socket_create (AF_INET, SOCK_STREAM, 0))) fatal_error_(); /* Lсокет будет неблокирующим */ if (!socket_set_nonblock($Lsock)) fatal_error_(); if (!socket_set_option($Lsock, SOL_SOCKET, SO_REUSEADDR, 1)) fatal_error_(); /* биндим Lсокет на нужный адрес/порт */ if (!socket_bind ($Lsock, $address, $port)) fatal_error_(); /* прослушиваем соединение на Lсокете */ if (!socket_listen ($Lsock, SOMAXCONN)) fatal_error_(); $clients = Array(); $abort = false; while (!$abort) { /* сливаем Lсокет и клиентские сокеты в один массив */ $socks = array_merge($Lsock, $clients); /* ждём... есть ли данные для чтения? */ if (socket_select($socks, $socks_w = NULL, $socks_e = NULL, 1, 0) > 0) { foreach ($socks as $sock) { /* Lсокет имеет конект? */ if ($sock == $Lsock) { /* принимаем новый конект */ if (($this = socket_accept($Lsock)) < 0) error_(); else { /* в клиент-лист */ $clients[$this] = $this; /* данные о клиенте в массив*/ socket_getpeername($this, $IPaddr); $data[$this]['IP'] = $IPaddr; send_all("<add ip=".$IPaddr." /add>".chr(0),""); } } else { /* значит у клиента есть данные */ if (($read = socket_read($sock, 128)) === false || $read == '') { if ($read != '') /* не удалось прочитать данные*/ myerror(); /* канект с клиентом пропал */ kill_client($sock); } else $read = substr($read, 0, strpos($read, "\n")); switch ($read): case '<die/>': // send_all("Shutting down server...",""); break 3; case '<quit/>': kill_client($sock); default: send_all($read); endswitch; } } } } socket_close ($Lsock); echo "Server down<br>"; ?> | ActionScript(функцию Connect привяжите к какой нить кнопке, для переменной messages создайте dynamic text) Цитата: System.useCodepage = true; var serverName = "127.0.0.1"; var serverPort = 10000; function Connect() { messages = "Connecting to server..."; sock = new XMLSocket(); // Устанавливаем обработчики событий sock.onConnect = onSockConnect; // соединение sock.onXML = onSockData(read); // получение данных sock.onClose = onSockClose; // связь утеряна sock.connect(serverName, serverPort); } function onSockConnect(success){ if (success){ // соединение установлено messages = "Connected to "+serverName+":"+serverPort; } else { messages="Can't connect to "+serverName+":"+serverPort; } } function onSockClose(){ messages = "Server closed socket"; } // Прием данных от сервера function onSockData(read) { var obj = read.firstChild; trace(read); while (obj != null) { // Обход всего XML дерева trace("read"); var tagname = obj.nodeName; //Возвращает имя тега элемента XML. switch (tagname) { case "err": messages = "Error:"+tagname.attributes.txt; case "add": messages = "User "+Usertagname.attributes.ip+" has connected"; case "del": messages = "User "+Usertagname.attributes.ip+" has disconnected"; default: messages = "Server:"+tagname } e = e.nextSibling; // переход к следующему элементу XML дерева } } |
|