The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"программирование Socketов на perle"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"программирование Socketов на perle"
Сообщение от Vasia Искать по авторуВ закладки on 09-Авг-01, 11:18  (MSK)
Народ, писал на "С" для сокетов. Все прекрасно. А как енто все работает на perlе? Может где все это описано человечаче? Или если не сложно и не жадно киньте простейший сэмпл tcp клиент/сервер!! Пожалуйста...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: программирование Socketов на perle"
Сообщение от XMan Искать по авторуВ закладки on 09-Авг-01, 22:09  (MSK)
Так это... "man perlfunc" на предмет socket, bind, accept, connect.
Там есть все, что тебе нужно :))
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: программирование Socketов на perle"
Сообщение от Dim Искать по авторуВ закладки on 10-Авг-01, 01:05  (MSK)
>Народ, писал на "С" для сокетов.
>Все прекрасно. А как енто
>все работает на 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);
}
   }
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: программирование Socketов на perle"
Сообщение от Vasia Искать по авторуВ закладки on 10-Авг-01, 12:52  (MSK)
Большое спасибо!!
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: программирование Socketов на perle"
Сообщение от Олег Искать по авторуВ закладки on 10-Авг-01, 17:45  (MSK)
Сходная проблема. Хотел написать крохотного клиента для телнет: войти запустить программу, выйти. Начал писать скрипт на перле.

#!/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 порт.

С уважением
Олег

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: программирование Socketов на perle"
Сообщение от XMan Искать по авторуВ закладки on 11-Авг-01, 03:12  (MSK)
>Сходная проблема. Хотел написать крохотного клиента
>для телнет: войти запустить программу,
>выйти. Начал писать скрипт на
>перле.
[skiped]
>Думал, увижу на экране "трали-вали login:
>". Вместо этого ничего не
>происходит. Netstat показывает соединение на
>23 порт.

Так, батенька, а протокол общения телнетов вы знаете ? Он же, сволочь, обычно работает в символьном режиме, а предварительно договаривается с сервером об этом и не только...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: программирование Socketов на perle"
Сообщение от Олег Искать по авторуВ закладки on 11-Авг-01, 18:11  (MSK)
Уже разбираюсь.
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру