Forum Webscript.Ru

Программирование => Perl => Тема начата: 09h от 19 Мая 2006, 01:16:44

Название: проблема с сокетами
Отправлено: 09h от 19 Мая 2006, 01:16:44
use Socket;

socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname(\'tcp\'));

$iaddr = inet_aton($host);
$paddr = sockaddr_in($port, $iaddr);
connect(SOCK, $paddr);

$msg = "\\x05\\x01\\x00";
send (SOCK, "$msg", 0);
sysread(SOCK,$answer_data,1024);
print_data($answer_data);

$msg = "\\x05\\x02\\x00\\x01\\xcd\\xbc\\x93\\x2e\\x09\\xf2";
send (SOCK, "$msg", 0);
sysread(SOCK,$answer_data,1024);
print_data($answer_data);


#FUNCTIONS

sub print_data() { # выводим данные в hex

my ($data)=@_;
my $i=0;

foreach(split(//,$data)) {
print unpack(\'H8\',$_)." ";
$i++;
if ($i eq 16) {
print "
\\n";
$i=0;
}

}

print "
\\n";

}
проблема: если делаю send (SOCK, "$msg", 0); больше 2-х раз скрипт вешается или оооочень долго думает.
как подольше пообщатся с сервером? запустил прогу которая через прокси сокс5 работает и снифером выдернул весь разговор
запрос - ответ:
05 01 00 - 05 00
05 02 00 01 cd bc 93 2e 09 f2 - 05 00 00 01 45 2f 67 8b 0e 40
05 02 00 02 - 05 00
05 01 00 03 0d 6c 6f 67 69 6e 2e 69 63 71 2e 63 6f 6d 14 46 - 05 00 00 01 45 2f 67 8b 0e 4d
... - ...
как этот разговор клиент-сервер реализовать?
Название: проблема с сокетами
Отправлено: 09h от 20 Мая 2006, 01:31:21
хмм... оно даже если и 2 раза send делаю всеравно часто на долго задумывается(( а разговор снифером видно, все ок. но на 3-й send сервер не отвечает... в чем проблема?
Название: проблема с сокетами
Отправлено: xames от 20 Мая 2006, 08:40:53
попробуй вместо send - syswrite SOCK $x, или print SOCK $x

может что нибудь изменится. или еще осылать символ \\n  в в конце каждого послания.
Название: проблема с сокетами
Отправлено: Zerokool от 21 Мая 2006, 22:38:35
А какова вообще задача. Возможно этот модуль и не нужен.
Название: проблема с сокетами
Отправлено: 09h от 22 Мая 2006, 00:01:46
задача разобратся с сокетом (как осуществить такой разговор клиента с сервером) ) можно и не на этом примере
Название: проблема с сокетами
Отправлено: xames от 22 Мая 2006, 06:51:10
$sock = IO::Socket::INET->new(PeerAddr => "$server_smtp:smtp(25)", Timeout => 4))
sysread $sock,$buf,255;
print "1: $buf";
syswrite $sock, "helo word\\r\\n";
sysread $sock,$buf,255;
print "2: $buf";
syswrite $sock, "quit\\r\\n";
sysread $sock,$buf,255;
print "3: $buf";
close $sock;

Рабочий пример "диалога" с smtp сервером. Как раз клиент с сервером.
Название: проблема с сокетами
Отправлено: Zerokool от 22 Мая 2006, 18:35:25
xames, вай маладэц. Харашо сказал, да
Название: проблема с сокетами
Отправлено: xames от 23 Мая 2006, 07:27:13
что-то не нравится?
Название: проблема с сокетами
Отправлено: Zerokool от 25 Мая 2006, 19:32:07
да нет, я в прямом смысле.
Кстати я раньше не пользовался модулями для работы с сокетами под Перлом. Вот настала серьезная необходимость. Ты по какой литературе изучал? Только не отсылай на Гугл. Мне интересно именно твое мнение.
Название: проблема с сокетами
Отправлено: xames от 26 Мая 2006, 06:47:33
Вот хорошая литература по Perl (http://books.0x10.net/), выложил в свое время до сих пор хранится))). Там как раз таки и есть хорошая книга (programming the network with perl),  показывающся примеры работы с сетью на различном уровне, в том числе и с сокетами.
Название: проблема с сокетами
Отправлено: Zerokool от 26 Мая 2006, 16:14:25
Мая твая сказать бальшая спасиба