- Регистрация
- 14 Янв 2008
- Сообщения
- 368
- Реакции
- 100
- Автор темы
- Заблокирован
- #1
Пытаюсь написать класс для протокола MMP Это тот что от агента:
так вот пытаюсь так
(знаю что гавна в коде много, всё же тестирую)
и
Но вот зависает на read - т.е. не отвечает
вроде подал ему всё как надо(хотя не уверен), на сайте написано
помогите, в чем проблема, из за чего не отвечает
должен прийти ответ:
я думаю, что скорее всего я не правильно делаю pack()
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
так вот пытаюсь так
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_INET, SOCK_STREAM, SOL_TCP);
if ($this->socet < 0 || $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 < 0 || $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, $pack, strlen($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 - т.е. не отвечает
вроде подал ему всё как надо(хотя не уверен), на сайте написано
MMP бинарный протокол. Все числовые данные передаются как четырехбайтные целые НЕ в сетевом формате, т. е. первым идет старший байт, последним младший. Четырехбайтовые беззнаковые целые обозначаются UL.
Текстовые данные передаются с префексированной длиной, т. е. сначала UL, а потом строка (в кодировке windows-1251) длины UL без завершающего нуля. Обозначение в дальнейшем - LPS.
помогите, в чем проблема, из за чего не отвечает
должен прийти ответ:
После установки tcp-соединения клиент обязан сразу послать MRIM_CS_HELLO, дождаться MRIM_CS_HELLO_ACK, после чего
я думаю, что скорее всего я не правильно делаю pack()