Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Проблема с XMLSocket(Flash) и php

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

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 дерева
}
}
 

Всего записей: 39 | Зарегистр. 12-01-2005 | Отправлено: 02:58 12-01-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
null_kamaz
хм.. а снифером посмотреть что и как передается и коннектится ли вообще?
зы: просто ломает Flash MX ставить для проверки.
плюс.. запись примитивных логов на php, чтобы понять, был ли вообще коннект.
вот, что еще нашел, может тут подсказку найдешь
http://www.delphimaster.ru/articles/flash/

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:18 12-01-2005 | Исправлено: Cheery, 03:19 12-01-2005
KADABRA



Великий покусатель
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
null_kamaz
А ты случаем с XML не ошибся?
Все атрибуты должны быть в кавычках.
И XML должен быть валидным.

----------
Это не подпись.

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 10:01 10-07-2005
SergioSuslin

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как минимум - грубая ошибка:
 
    sock.onXML = onSockData(read);           // получение данных
 
Замени это на
 
    sock.onXML = onSockData;           // получение данных
 
А вообще я у тебя несколько неточностей находил. Повнимательнее с XML-ем.
<add ip=".$IPaddr." /add> - это бред
 

Всего записей: 1 | Зарегистр. 09-05-2007 | Отправлено: 10:22 09-05-2007 | Исправлено: SergioSuslin, 10:25 09-05-2007
Filim0niC

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Угу, согласен, флеш очень к XMLке требовательный, лучше каким-то XML редактором делай.
Кодировка у обоих UTF8 ?

Всего записей: 1 | Зарегистр. 25-06-2007 | Отправлено: 22:33 19-07-2007
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Проблема с XMLSocket(Flash) и php


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru