🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #883

Re: Perl i socket'y

#883
From: Piotr Piatkowski
Date: Wed, 14 Jan 1998 11:58
49 lines
2423 bytes
Sebastian Lukasiewicz <d0roc@kmicic.is.com.pl> wrote:

: socket(SOCK, PF_INET, SOCK_STREAM, $proto)  || die "Socket error\n";
: connect(SOCK, $paddr) || die "error\n";
: while($line = <SOCK>)
: {
: 	print $line;
: }

: Program sie laczy z serverem newsow i "wywala" taka linie :

: 200 lublin.pl InterNetNews NNRP server INN 1.5.1 17-Dec-1996 ready (posting ok).

: Chce zapisac liste grup newsowych na jakas zmienna. Wiem ze nalezy wyslac
: do serwera komende LIST. W jaki sposob mam przerobic ten programik zeby
: zapisywal mi na zmienna liste grup newsowych?

Na początek wyłącz buforowanie tego socketa, żeby komenda print od 
razu przesyłała dane, a nie czekała aż się ich zbierze większa ilość:

select SOCK; $|=1; select stdout;

A później to już prosto:

# pobierz linię "powitalną" od serwera
$first_line = <SOCK>;
# pobierz listę
print SOCK "LIST\r\n";
while(<SOCK>) {
  chop; chop;
  last if /^\.$/;  # kropka kończy listę grup
  ( $grupa, $pierwszy_art, $ostatni_art, $moderowana ) = split;
  # tutaj wrzucasz do tablicy to co Cię interesuje, np:
  push @grupy, $grupa;
}

# A tutaj już można robić coś dalej, np. odczytać listę dostępnych 
# artykułów danej grupy przez LISTGROUP nazwa.grupy albo odczytać
# konkretny artykuł przez ARTICLE numer_artykułu

Zwróć uwagę, że praktycznie wszystkie protokoły zaznaczają koniec 
linii nie przez \n, a przez \r\n, z czym wiąże się konieczność 
obcięcia dwóch znaków z końca każdej linii, i dodania odpowiedniej 
sekwencji na końcu tego co się wpisuje w print.

P.S. Program nie sprawdzony, mogą być błędy :-)

-- 
Piotr Piątkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Technical Details
Message-ID: <69i996$blp$1@galaxy.uci.agh.edu.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!uucp-gw.cyf.gov.pl!news.wnaft.agh.edu.pl!agh.edu.pl!agh.edu.pl!not-for-mail
References: <Pine.LNX.3.93.980114070615.15703A-100000@kmicic.is.com.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!uucp-gw.cyf.gov.pl!news.wnaft.agh.edu.pl!agh.edu.pl!agh.edu.pl!not-for-mail
From: Piotr Piatkowski <kompas@galaxy.uci.agh.edu.pl>
Newsgroups: pl.comp.lang.perl
Subject: Re: Perl i socket'y
Date: 14 Jan 1998 12:58:30 +0100
Organization: University of Mining & Metallurgy
Lines: 49
Message-ID: <69i996$blp$1@galaxy.uci.agh.edu.pl>
References: <Pine.LNX.3.93.980114070615.15703A-100000@kmicic.is.com.pl>
NNTP-Posting-Host: galaxy.uci.agh.edu.pl
Mime-Version: 1.0
X-Newsreader: TIN [UNIX 1.3 unoff BETA 971018; sun4m SunOS 5.5.1]
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit