- RE: программирование Socketов на perle, XMan, 22:09 , 09-Авг-01 (1)
Так это... "man perlfunc" на предмет socket, bind, accept, connect. Там есть все, что тебе нужно :)) - RE: программирование Socketов на perle, Dim, 01:05 , 10-Авг-01 (2)
>Народ, писал на "С" для сокетов. >Все прекрасно. А как енто >все работает на perlе?Практически так же как и на Си, с небольшим отклонением синтаксиса. Как клиента писать можно подчерпнуть из множества скриптов, сервер пишется примерно так: use Socket; sub AF_INET { return 2; } sub SOCK_STREAM { return 1; } socket(S,AF_INET,SOCK_STREAM,$protocol) || die "socket : $!"; setsockopt(S,SOL_SOCKET,SO_REUSEADDR,1) || die "setsockopt : $!"; setsockopt(S, IPPROTO_TCP, TCP_NODELAY, 1) || die "setsockopt : $!"; setsockopt (S, SOL_SOCKET, SO_LINGER, 0); setsockopt(S, SOL_SOCKET,SO_KEEPALIVE, 1) || die "setsockopt : $!"; my($sockaddr) = 'S n a4 x8'; my($this) = pack($sockaddr, AF_INET, $port, "\0\0\0\0"); while (!(bind(S, $this))) { if (! -t STDIN) { print "<br>\n"; } print "Waiting for port $port to free\n"; exit; sleep(5); } listen(S, 50) || die "listen: $!"; select(S); $| = 1; select(STDOUT); my($con) = 0; my($locs); if (fork()) { exit; } close(STDIN); close(STDOUT); close(STDERR); while (1) { $rin = $win = $ein = ''; vec($rin, fileno(S), 1) = 1; ($numready, $timeleft) = select($rout=$rin, undef, undef, undef); if (vec($rout, fileno(S), 1)) { $con ; local *SOCKET; if(($addr = accept(SOCKET, S))) { $sockets{$con} = *SOCKET; select($sockets{$con}); $|=1; select(STDOUT); ($af,$cport, $inetaddr) = unpack($sockaddr, $addr); undef $host; if (defined($thesocket) && vec($rout, fileno($thesocket), 1)){ $data = substr(&readline($thesocket,0),0,1024); } } }
- RE: программирование Socketов на perle, Олег, 17:45 , 10-Авг-01 (4)
Сходная проблема. Хотел написать крохотного клиента для телнет: войти запустить программу, выйти. Начал писать скрипт на перле. #!/usr/bin/perl use socket; $server = "localhost"; $port = 23; $server_addr =(gethostbyname($server))[4]; $server_struct = pack("S n a4 x8", AF_INET, $port, $server_addr); $proto = (getprotobyname('tcp'))[2]; socket(MYSOCK, PF_INET, SOCK_STREAM, $proto)||die "Error getting socket\n"; connect(MYSOCK, $server_struct) || die "Connection error\n"; select(MYSOCK); $| = 1; select(STDOUT); print MYSOCK "GET /\n\n"; while (<MYSOCK>) { print; } close(MYSOCK); Думал, увижу на экране "трали-вали login: ". Вместо этого ничего не происходит. Netstat показывает соединение на 23 порт. С уважением Олег
- RE: программирование Socketов на perle, XMan, 03:12 , 11-Авг-01 (5)
>Сходная проблема. Хотел написать крохотного клиента >для телнет: войти запустить программу, >выйти. Начал писать скрипт на >перле. [skiped] >Думал, увижу на экране "трали-вали login: >". Вместо этого ничего не >происходит. Netstat показывает соединение на >23 порт. Так, батенька, а протокол общения телнетов вы знаете ? Он же, сволочь, обычно работает в символьном режиме, а предварительно договаривается с сервером об этом и не только...
|