Помогите с socket (MMP)

Тема в разделе "PHP", создана пользователем Dador, 8 июн 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Dador

    Dador Читатель

    Заблокирован
    Регистр.:
    14 янв 2008
    Сообщения:
    368
    Симпатии:
    97
    Пытаюсь написать класс для протокола MMP Это тот что от агента: Перейти по ссылке
    так вот пытаюсь так
    PHP:
    class Mra {
        function 
    prepare($body)
        {
            
    $this->sequence++;
            
    $out pack('V'strlen($body)).pack('a',$this->body);
            return 
    $out;
        }
        function 
    open($url = array('94.100.181.63'2041)) {
            
    $this->socet socket_create(AF_INETSOCK_STREAMSOL_TCP);
            if (
    $this->socet || $this->socet === false) {
                
    $this->error "socket_create() failed: reason: " socket_strerror($this->socet);
                return 
    false;
            }
            
    $result socket_connect($this->socet$url[0], $url[1]);
            if (
    $result || $result === false) {
                
    $this->error "socket_connect() failed.\nReason: ($result) " socket_strerror(socket_last_error($socket));
                return 
    false;
            }
            return 
    true;
        }
        function 
    write($pack) {
            
    $pack=$this->prepare($pack);
            
    socket_write($this->socet$packstrlen($pack));
        }
        function 
    read() {
            return 
    socket_read($this->socet,1024,PHP_BINARY_READ);
        }
    }
    (знаю что гавна в коде много, всё же тестирую)
    и
    PHP:
    $mra=new Mra;
    $mra->open();
    echo 
    'Открыто соединение<br>';
    $mra->write('MRIM_CS_HELLO');
    echo 
    'Отправили команду<br>';
    echo 
    $mra->read();
    Но вот зависает на read - т.е. не отвечает :(
    вроде подал ему всё как надо(хотя не уверен), на сайте написано

    помогите, в чем проблема, из за чего не отвечает
    должен прийти ответ:

    я думаю, что скорее всего я не правильно делаю pack()
     
  2. PomanoB

    PomanoB Писатель

    Регистр.:
    30 май 2009
    Сообщения:
    5
    Симпатии:
    3
    MRIM_CS_HELLO это только условное имя
    #define MRIM_CS_HELLO 0x1001
    то есть посылать надо 0x1001
     
    Dador нравится это.
  3. Dador

    Dador Читатель

    Заблокирован
    Регистр.:
    14 янв 2008
    Сообщения:
    368
    Симпатии:
    97
    все равно тоже самое...
     
  4. PomanoB

    PomanoB Писатель

    Регистр.:
    30 май 2009
    Сообщения:
    5
    Симпатии:
    3
    MRIM_CS_HELLO это не текстовые данные, поэтому не нужно передавать длинну, надо передать просто число
     
    Dador нравится это.
Статус темы:
Закрыта.