Показать сообщение отдельно

  #2  
Старый 20.02.2009, 20:51
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

eLWAux Вся проблема в том как раз, что ты сразу закрываешь соединение с jabber сервером.

<stream:stream to='jabber.ru' ..... [b]/[b]> Эквивалентно <stream:stream .... ></stream:stream>

Т.е. Сервер отвечает на начальный пакет, и видя закрытие тэга stream:stream - закрывает соединение

Запусти wireshark и такой скрипт
PHP код:
#!/usr/bin/perl
use IO::Socket;

my $sock = new IO::Socket::INET(
   PeerAddr => 'jabber.ru',
   PeerPort => 5222, #5223
   Timeout  => 1,
   Type => SOCK_STREAM,
   Proto => 'tcp', 
   Blocking => 0) or
   die " [-] connect \n"; 
print "connected!\n";
 print $sock "<?xml version='1.0' encoding='UTF-8'?><stream:stream to='jabber.ru' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' xml:lang='ru' version='1.0'>";
 read($sock,$input,529); # цифра взята на глазок
 print ($input."\n\n------------\n\n");
 print $sock "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='DIGEST-MD5'/>";
 read($sock,$input,146);
 print ($input);
 close ($sock);
Будет видно что сервер ответит на оба пакета

Проблема по сути - как получать ответ от сервера. Не зная перл могу предположить, что конструкция while ($input = <$sock>) - будет ждать закрытия сокета и только тогда выведет результат