VPF::уничтожение данных класса при вызове второго конст - Форум программистов
Загрузка. Пожалуйста,подождите...
Занимаешься фрилансом? Заполни свой профиль на Винграде!
Здравствуйте, Гость (
Вход |
Регистрация |
Что даёт регистрация на форуме?
)
Восстановить пароль |
Выслать повторно письмо для активации
Новости для программистов подгружаются..
Форум программистов Vingrad
Новости ·
Запросы ·
Wiki ·
FAQ
Правила ·
Помощь ·
Рейтинг ·
Избранное ·
Поиск ·
Участники
Обновленные блоги:adm, alev, neic, solenko, ida, balabol, interface, COVD, dm9, doomik, borodaalex, veitmen, booker, wowa, archeg, javstic, veitmen11, kemiisto, Retro, nitrexin
Создай свой блог!
Форум -> Разработка систем для Web -> Perl
Модераторы: korob2001, sharq
Поиск:
уничтожение данных класса при вызове второго конст
Опции темы
Теги:
нет
FooBar (Online)
Дата 8.4.2008, 15:30 (ссылка)
| (нет голосов)
Загрузка ...
Новичок
Профиль
Группа: Участник
Сообщений: 10
Друзей: 0; Групп: 0
Регистрация: 25.2.2008
Репутация: нет Всего: нет
написал небольшой класс для работы с icq,Кодpackage Ociky;use strict;use Socket;use constant {SNAC1 => "\x00\x03\x00\x08\x49\x43\x51\x42\x61\x73\x69\x63\x00\x16\x00". "\x02\x01\x0A\x00\x17\x00\x02\x00\x14\x00\x18\x00\x02\x00\x22". "\x00\x19\x00\x02\x00\x00\x00\x1A\x00\x02\x09\x11\x00\x14\x00". "\x04\x00\x00\x04\x3D\x00\x0F\x00\x02\x65". "\x6E\x00\x0E\x00\x02\x75\x73",Roast => "\xF3\x26\x81\xC4\x39\x86\xDB\x92\x71\xA3\xB9\xE6\x53\x7A\x95\x7C",SNAC2 => "\x00\x00\x00\x01\x00\x06\x01\x00",SNAC3 => "\x00\x01\x00\x02\x00\x00\x00\x00\x00\x01\x00\x01\x00\x03\x01\x10". "\x02\x8A\x00\x02\x00\x01\x01\x10\x02\x8A\x00\x03\x00\x01\x01\x10". "\x02\x8A\x00\x15\x00\x01\x01\x10\x02\x8A\x00\x04\x00\x01\x01\x10". "\x02\x8A\x00\x06\x00\x01\x01\x10\x02\x8A\x00\x09\x00\x01\x01\x10". "\x02\x8A\x00\x0A\x00\x01\x01\x10\x02\x8A",mSNAC1 => "\x00\x04\x00\x06\x00\x00\x00\x00\x00\x02\x1D\x91\xEF\x52\xEA\x92\xD3\x3F\x00\x02",mSNAC2 => "\x00\x00\x1D\x91\xEF\x52\xEA\x92\xD3\x3F\x09\x46\x13\x49\x4C\x7F". "\x11\xD1\x82\x22\x44\x45\x53\x54\x00\x00\x00\x0A\x00\x02\x00\x01". "\x00\x0F\x00\x00\x27\x11",mSNAC3 => "\x1B\x00\x08".("\x00"x19)."\x03\x00\x00\x00\x00\x02\x00\x0E\x00". "\x02".("\x00"x13)."\x01\x00\x00\x00\x00\x01",ICQ_Host => 'login.icq.com',ICQ_Port => 5190};sub new { my (undef,$uin,$password) = @_; my $self = {}; bless($self); my $SNAC = "\x00\x00\x00\x01\x00\x01".int2bytes(length($uin)).$uin. "\x00\x02".int2bytes(length($password)). substr($password^Roast,0,length($password)).SNAC1; my $FLAP = "\x2A\x01".seqNum().int2bytes(length($SNAC)); my $socket; socket($socket,AF_INET,SOCK_STREAM,getprotobyname('tcp')); connect($socket,sockaddr_in(ICQ_Port,inet_aton(ICQ_Host))); my $response; recv($socket,$response,10,0); send($socket,$FLAP.$SNAC,0); recv($socket,$response,2048,0); close($socket); if(my($BOS_Host,$BOS_Port) = $response=~/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})/o) { my $i = 0; for(;;$i++) { last if substr($response,$i,4) eq "\x00\x06\x01\x00" } my $Cookie = substr($response,4+$i,256); print "[+] $uin reconnect to bos server: $BOS_Host:$BOS_Port\n"; $SNAC = SNAC2.$Cookie; $FLAP = "\x2A\x01".seqNum().int2bytes(length($SNAC)); socket($self->{SOCK},AF_INET,SOCK_STREAM,getprotobyname('tcp')); connect($self->{SOCK},sockaddr_in($BOS_Port,inet_aton($BOS_Host))); recv($self->{SOCK},$response,10,0); send($self->{SOCK},$FLAP.$SNAC,0); recv($self->{SOCK},$response,1024,0); $FLAP = "\x2A\x02".seqNum().int2bytes(length(SNAC3)); send($self->{SOCK},$FLAP.SNAC3,0); return $self } else { return }}sub sendim { my $self = shift; my ($targetUin,$message) = @_; my $SNAC = mSNAC1.pack('h',length($targetUin)).$targetUin."\x00\x05". int2bytes(length($message)+102).mSNAC2. int2bytes(length($message)+62).mSNAC3. pack('v',length("$message\0")).$message. "\x00\x00\x00\x00\x00\xFF\xFF\xFF\x00"; my $FLAP = "\x2A\x02".seqNum().int2bytes(length($SNAC)); send($self->{SOCK},$FLAP.$SNAC,0)}BEGIN { my $seqNum = int(rand(65535)); sub seqNum { $seqNum++; $seqNum = 0 if $seqNum > 65535; return int2bytes($seqNum) }}sub int2bytes { return pack('n',shift) }1вызываю его методы вот таким образомКод#!/usr/bin/perl -wuse strict;use Ociky;my $icq = Ociky->new(123456,'p@$$W0rD');$icq->sendim(31337, 'Hello!');<>;номер выходит в онлайн, отсылает сообщениено если вызвать вот так:Код#!/usr/bin/perl -wuse strict;use Ociky;my $icq1 = Ociky->new(4543534,'sdfdsfds');my $icq2 = Ociky->new(7663434,'csd4dfd');$icq2->sendim(31337, 'Hello!');$icq1->sendim(31337, 'Hello!');<>;то приходит сообщение только с $icq2, а $icq1 заходит в сеть и сразу из нее вылетает. по всей видимости при вызове второго метода new происходит уничтожение данных класса $icq1, вопрос в том как от этой проблемы избавится?
tishaishii
Дата 8.4.2008, 17:49 (ссылка)
| (нет голосов)
Загрузка ...
Опытный
Профиль
Группа: Участник
Сообщений: 645
Друзей: 0; Групп: 0
Регистрация: 14.2.2006
Репутация: 3 Всего: 4
use Net::ICQ
ginnie
Дата 8.4.2008, 17:59 (ссылка)
| (нет голосов)
Загрузка ...
Бывалый
Профиль
Группа: Участник
Сообщений: 167
Друзей: 0; Групп: 0
Регистрация: 6.1.2008
Где: Москва
Репутация: 5 Всего: 5
FooBar, надо смотреть ошибки при соединении. Уничтожение данных класса $icq1 происходить не должно, т.к. там из данных только $self->{SOCK}.Кроме того, неверно реализована функция seqNum(), т.к. она использует общую для всех объектов переменную $seqNum (по идее она должна быть для каждого объекта своя).
--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
FooBar (Online)
Дата 8.4.2008, 18:53 (ссылка)
| (нет голосов)
Загрузка ...
Новичок
Профиль
Группа: Участник
Сообщений: 10
Друзей: 0; Групп: 0
Регистрация: 25.2.2008
Репутация: нет Всего: нет
tishaishii, я знаю и о Net::ICQ и о Net::OSCAR, но мне прежде всего интересно разобраться в самом протоколе,ginnie, спасибо, это происходило из за номера пакета который генерировался функцией seqNum(), хотя в описании протокола говорилось что он не имеет значения.сам патч: $self->{SEQNUM} = sub { $seqNum++; $seqNum = 0 if $seqNum > 65535; return int2bytes($seqNum) }; &{$self->{SEQNUM}}
ginnie
Дата 8.4.2008, 19:06 (ссылка)
| (нет голосов)
Загрузка ...
Бывалый
Профиль
Группа: Участник
Сообщений: 167
Друзей: 0; Групп: 0
Регистрация: 6.1.2008
Где: Москва
Репутация: 5 Всего: 5
FooBar, предлагаю нормальный вариант:в конструкторе new() пишемКод$self->{SEQNUM} = int(rand(65535));и модифицируем функцию seqNum()Кодsub seqNum { $self->{SEQNUM}++; $self->{SEQNUM} = 0 if ($self->{SEQNUM} > 65535); return int2bytes($seqNum)}
--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
nitr
Дата 8.4.2008, 23:45 (ссылка)
| (нет голосов)
Загрузка ...
Эксперт
Профиль
Группа: Участник Клуба
Сообщений: 1724
Друзей: 10; Групп: 5
Регистрация: 10.2.2006
Где: Россия :)
Репутация: 32 Всего: 59
Поддержу ответ ginnie, я так и делал (однажды).FooBar, молодец, что решил разобраться. Сколько знаю, мало кто может понять протокол Но ваш модуль "слишком тяжёлый". Например, метод new, такого стиля я ещё не встречал, думаю, стоит разделить на "функциональные" части. Вам же проще в дальнейшем будет.P.S.: Если приноровиться, то как логгер ошибок можно использовать Data::Dumper::Dumper ;)
--------------------
найдется многое на CPAN ;)По-гугли, не проходи мимо!#!perlФорум группы Perl
KSURi
Дата 9.4.2008, 00:28 (ссылка)
| (нет голосов)
Загрузка ...
Опытный
Профиль
Группа: Участник
Сообщений: 298
Друзей: 4; Групп: 1
Регистрация: 8.6.2006
Где: Russia
Репутация: 3 Всего: 6
nitr, спецификацию протокола открыли недавно.Раньше оно посложнее было, имхо, т.к. люди полагались только на снифер. Я свой модуль (около года назад) так и не дописал дальше выхода в онлайн, не хватило терпения =(
--------------------
Died at Life.pl line 17
nitr
Дата 9.4.2008, 01:22 (ссылка)
| (нет голосов)
Загрузка ...
Эксперт
Профиль
Группа: Участник Клуба
Сообщений: 1724
Друзей: 10; Групп: 5
Регистрация: 10.2.2006
Где: Россия :)
Репутация: 32 Всего: 59
KSURi, так я приводил здесь несколько ресурсов на "неофициальное описание", которое хоть и было построено на данных сниффера и других источников, но работало "как часы" Писать свой модуль, даже не знаю, имхо, только для изучения или мини-сервисов/ботов. А так надо, чтобы Net::OSCAR обновлялся и совершенствовался.Открыли протокол это хорошо, но он проще от этого не стал ;)
--------------------
найдется многое на CPAN ;)По-гугли, не проходи мимо!#!perlФорум группы Perl
KSURi
Дата 9.4.2008, 01:35 (ссылка)
| (нет голосов)
Загрузка ...
Опытный
Профиль
Группа: Участник
Сообщений: 298
Друзей: 4; Групп: 1
Регистрация: 8.6.2006
Где: Russia
Репутация: 3 Всего: 6
Да, я читал несколько "неофициальных" статей по исследованию протокола, но они были написаны для относительно старых версий (7ая против текущей 11ой) и там были описаны только процедуры логина и отправки сообщений.Мне не хватило терпения доделать отправку/прием сообщения по той "документации", а вот как делать, например, получение офлайновых сообщений, direct connect, передавать файлы и прочие вещи, которые не были описаны вообще нигде, я слабо представлял.
--------------------
Died at Life.pl line 17
Google
Дата 1.5.2008, 00:22 (ссылка)
Правила форума "Perl"
В этом разделе обсуждаются общие вопросы по языку Perl
Если ваш вопрос относится к системному программированию, задавайте его здесь
Если ваш вопрос относится к CGI программированию, задавайте его здесь
Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
Справочное руководство "Установка perl-модулей", можно скачать здесь
FAQ раздела лежит здесь!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl | Следующая тема »
Подписаться на тему |
Подписка на этот форум |
Скачать/Распечатать тему
Главная страница форума
Поиск
Помощь
Программирование
- C++
- Delphi, Kylix and Pascal
- Java
- .NET
- Visual Basic
- ASM
- Python
- Базы данных
- Красная книга
Разработка систем для Web
- PHP
- Perl (+2 подфорумы)
- Ruby
- Flash platform
- ASP
- JavaScript
- Теория веб-дизайна
- Вёрстка веб-сайтов
- Хостинг и доменные имена
- Администрирование Web серверов и Web служб (+1 подфорумы)
- XML, XSL
- Интернет-бизнес и продвижение сайтов
- Работа с готовыми скриптами и поиск движков
Технологии и алгоритмы
- Алгоритмы
- Технологии
- Репортинговые системы
- Программирование контроллеров
- Программирование мобильных устройств
- Программирование игр, графики и искусственного интеллекта
Компьютерные системы
- 3D
- MS Windows
- Linux/Unix
- 1C: Предприятие, SAP, ERP и учётные системы
- Сетевые технологии
- Программное обеспечение
- Компьютерное железо
- MS Office
- Звук, графика и видео
Разное
- Работа в офисе
- Совместные проекты/поиск партнёров
- Готовые и разрабатываемые проекты
- Управление проектами
- Наши тесты (+1 подфорумы)
- Игры
- Компьютерная литература (+1 подфорумы)
- Флейм
- Разные вопросы
Vingrad
- Vingrad - Колледж
- Vingrad
- Наши встречи (+1 подфорумы)
- Наши проекты
- Форум для админов и модераторов
[ Время генерации скрипта: 0.5784 ] [ Использовано запросов: 28 ] [ GZIP выключен ]
Реклама на сайте
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Хостинг: Vingrad Hosting
Отказ от ответственности
Powered by Invision Power Board(R) 1.3 2003 IPS, Inc.
snr
ppg
fifa 2006
restart
black decker
ariston
478
fag
orly
lida
-
xxx
thuraya sg 2510