🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
8 messages
8 total messages Started by Waldek Grudzień Fri, 06 Mar 1998 14:52
Przykłady klienta/serwera TCP/IP ?
#1069
Author: Waldek Grudzień
Date: Fri, 06 Mar 1998 14:52
12 lines
959 bytes
Czy ktoś zna jakiś adres z przykładami klienta/Serwera TCP/IP w
PERL'u ? (oprócz tych z PERL manuala (pod))

Pozdrawiam,
                              Waldek Grudzien

    ///////////////////////////////////////////
   //  http://www.uhc.lublin.pl/~waldekg/   //
  //   Lublin/Lubartow, Poland             //
  \\   University Health Care              \\
   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Re: Przykłady klienta/serwera TCP/IP ?
#1070
Author: Piotr Piatkowski
Date: Fri, 06 Mar 1998 22:53
14 lines
1049 bytes
Waldek Grudzień wrote:
> 
> Czy ktoś zna jakiś adres z przykładami klienta/Serwera TCP/IP w
> PERL'u ? (oprócz tych z PERL manuala (pod))

Nie wiem które przykłady masz na mysli, ale czy widziałes

perldoc IO/Socket ?

Bo przykłady tam umieszczone są już tak proste, że nie bardzo widzę
potrzebę czegos prostszego...

--
Piotr Piatkowski, WEB Corporation Polska sp. z o.o.
Re: Przykłady klienta/serwera TCP/IP ?
#1071
Author: Waldek Grudzień
Date: Mon, 09 Mar 1998 06:44
37 lines
1998 bytes
On Fri, 6 Mar 1998, Piotr Piatkowski wrote:

> Waldek Grudzień wrote:
> > 
> > Czy ktoś zna jakiś adres z przykładami klienta/Serwera TCP/IP w
> > PERL'u ? (oprócz tych z PERL manuala (pod))
> 
> Nie wiem które przykłady masz na mysli, ale czy widziałes
> 
> perldoc IO/Socket ?
> 
> Bo przykłady tam umieszczone są już tak proste, że nie bardzo widzę
> potrzebę czegos prostszego...

Przykłady te (przynajmniej w wersji którą mam) pokazują tylko jak tworzyć
sockety (co właściwie wiedziałem już wcześniej). Kłopot mam w
pisaniu/czytaniu przez klienta/serwera. Próbowałem przerabić na
różne sposoby przykłady z perlmanuala (zawarte w attachmencie)(rozdział :
perlipc - Perl interprocess communication) do postaci :

klient->pisz(costam),

server->czytaj, server->analizuj, server->odpowiedź

...

ale niestety jak na razie bez sukcesu.
Jakby ktoś miał jakieś pomysły byłbym wdzięczny.

Pozdrawiam,
                              Waldek Grudzien

    ///////////////////////////////////////////
   //  http://www.uhc.lublin.pl/~waldekg/   //
  //   Lublin/Lubartow, Poland             //
  \\   University Health Care              \\
   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Re: Przykłady klienta/serwera TCP/IP ?
#1072
Author: Piotr Piatkowski
Date: Mon, 09 Mar 1998 14:34
24 lines
1630 bytes
Waldek Grudzień wrote:
> On Fri, 6 Mar 1998, Piotr Piatkowski wrote:
> > Nie wiem które przykłady masz na mysli, ale czy widziałes
> > perldoc IO/Socket ?
> 
> Przykłady te (przynajmniej w wersji którą mam) pokazują tylko jak tworzyć
> sockety (co właściwie wiedziałem już wcześniej). 

Zainstaluj sobie perla 5.004 i zobacz perldoc IO/Socket

> Kłopot mam w
> pisaniu/czytaniu przez klienta/serwera.

A co do tego, wydaje mi się że problem jest klasyczny - zapominasz że samo
wykonanie print nie wystarczy do wysłania danych - trzeba wczesniej
jeszcze dla danego handle wyłączyć buforowanie. Czyli jeżeli SOCKET to
handle do otwartego i podłączonego gniazdka, to zrób np. cos takiego:

select SOCKET; $|=1; select stdout;

Oczywiscie przyczyna problemów może być inna :-)

--
Piotr Piatkowski, WEB Corporation Polska sp. z o.o.
Re: Przykłady klienta/serwera TCP/IP ?
#1073
Author: Waldek Grudzień
Date: Tue, 10 Mar 1998 07:38
60 lines
3117 bytes
On Mon, 9 Mar 1998, Piotr Piatkowski wrote:

> Waldek Grudzień wrote:
> > On Fri, 6 Mar 1998, Piotr Piatkowski wrote:
> > > Nie wiem które przykłady masz na mysli, ale czy widziałes
> > > perldoc IO/Socket ?
> > 
> > Przykłady te (przynajmniej w wersji którą mam) pokazują tylko jak tworzyć
> > sockety (co właściwie wiedziałem już wcześniej). 
> 
> Zainstaluj sobie perla 5.004 i zobacz perldoc IO/Socket

Mam 5.004 (_04 nawet) i jedyne przykłady to jak wspomniałem tworzenie
socketów :
--------------------------------------------------------------------------
Examples:

         $sock = IO::Socket::INET->new(PeerAddr => 'www.perl.org',
                                       PeerPort => 'http(80)',
                                       Proto    => 'tcp');

         $sock = IO::Socket::INET->new(PeerAddr => 'localhost:smtp(25)');

         $sock = IO::Socket::INET->new(Listen    => 5,
                                       LocalAddr => 'localhost',
                                       LocalPort => 9000,
                                       Proto     => 'tcp');

         $sock = IO::Socket::INET->new('127.0.0.1:25');

Koniec examples.
--------------------------------------------------------------------------

> > Kłopot mam w
> > pisaniu/czytaniu przez klienta/serwera.
> 
> A co do tego, wydaje mi się że problem jest klasyczny - zapominasz że samo
> wykonanie print nie wystarczy do wysłania danych - trzeba wczesniej
> jeszcze dla danego handle wyłączyć buforowanie. Czyli jeżeli SOCKET to
> handle do otwartego i podłączonego gniazdka, to zrób np. cos takiego:
> 
> select SOCKET; $|=1; select stdout;

Próbowałem i ten manewr...

> Oczywiscie przyczyna problemów może być inna :-)

Na to niestety wygląda.
I dlatego ponawiam moją prośbę o jakieś adresy z kompletnymi przykładami
klienta/serwera (przeszukując sieć niestety nic sensownego nie znalazłem
(oprócz przykładów z perl mana))

Pozdrawiam,
                              Waldek Grudzien

    ///////////////////////////////////////////
   //  http://www.uhc.lublin.pl/~waldekg/   //
  //   Lublin/Lubartow, Poland             //
  \\   University Health Care              \\
   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Re: Przykłady klienta/serwera TCP/IP ?
#1074
Author: Stefan Batory
Date: Tue, 10 Mar 1998 17:03
80 lines
2490 bytes
Waldek Grudzień wrote:

> I dlatego ponawiam moją prośbę o jakieś adresy z kompletnymi przykładami
> klienta/serwera (przeszukując sieć niestety nic sensownego nie znalazłem
> (oprócz przykładów z perl mana))
>

Mam nadzieje, że to pomoże i coś wyjaśni:
Powinno działać. kod jest prosty i jedyną rzeczą jaką klient robi to odbieranie
i wysyłanie ale na tej bazie udało mi się zrobić kilka bardziej skomplikowanych
rzeczy
Powodzenia

--Stefan Batory


#!/usr/bin/perl

($them, $port) = @ARGV ;

$port = 2345 unless $port ;
$them = 'localhost' unless $them ;

$AF_INET = 2 ;
$SOCK_STREAM = 1 ;

$SIG{'INT'} = 'dokill' ;

sub dokill {
    kill 9,$child if $child ;
}

$sockaddr = 'S n a4 x8' ;

chop($hostname = 'hostname') ;

($name, $aliases, $proto) = getprotobyname('tcp') ;
($name, $aliases, $proto) = getservbyport($port,'tcp')
    unless $port =~ /^\d+$/ ;

($name, $aliases, $type, $len, $thisaddr) =
    gethostbyname($host) ;
($name, $aliases, $type, $len, $thataddr) = gethostbyname($them) ;

$this = pack($sockaddr, $AF_INET, 0, $thisaddr) ;
$that = pack($sockaddr, $AF_INET, $port, $thataddr) ;

if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) {
    print "socket ok\n" ;
} else {
    die $! ;
}

if (bind(S, $this)) {
    print "bind ok\n" ;
} else {
    die $! ;
}

if (connect(S, $that)) {
    print "connection ok\n" ;
} else {
    die $! ;
}


select(S) ; $| = 1 ; select(STDOUT) ;


if($child = fork) {
    while (<STDIN>) {
        print S ;
    }
    sleep 3 ;
    do dokill() ;
} else {
    while(<S>) {
        print ;
    }
}
Re: Przykłady klienta/serwera TCP/IP ?
#1076
Author: Piotr Piatkowski
Date: Tue, 10 Mar 1998 22:13
10 lines
1167 bytes
> > Zainstaluj sobie perla 5.004 i zobacz perldoc IO/Socket
> 
> Mam 5.004 (_04 nawet) i jedyne przykłady to jak wspomniałem tworzenie
> socketów :

Oops, chyba jakies zaćmienie miałem... Przykłady klienta/serwera można
znaleźć pod man perlipc.

--
Piotr Piatkowski, WEB Corporation Polska sp. z o.o.
Re: Przykłady klienta/serwera TCP/IP - rozwiązanie ...
#1075
Author: Waldek Grudzień
Date: Thu, 12 Mar 1998 07:01
32 lines
1823 bytes
Wiem już co było bezpośrednim powodem moich kłopotów z niemożnością
czytania/pisania z klienta/serwera.
O ile konstrukcja :

while (defined ($line = <SOCK>)) {
   print $line;
}

działa (czyta) poprawnie na kliencie, to próba odczytu tym sposobem przez
serwer po prostu go blokuje (ale dlaczego na razie jeszcze nie wiem).

Po stronie serwera użyłem konstrukcji 

   chop($line=<Client>);
   $line=~s/\r$//;
   while (defined $line) {
      last if $line=~/^$/;
      print "$line\n";
      chop($line=<Client>);
   }

która już go nie blokuje

Pozdrawiam,
                              Waldek Grudzien

    ///////////////////////////////////////////
   //  http://www.uhc.lublin.pl/~waldekg/   //
  //   Lublin/Lubartow, Poland             //
  \\   University Health Care              \\
   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads