In questo tutorial vorrei affrontare un'argomento che interessera i neo programmatori di perl, ovvero la creazione di un socket.
In questa guida non voglio spiegare cosa sia un socket, senno mi allungherei un po, ma basta che cercate due minuti su google e trovate tutte le definizioni possibili...
in poche parole comunque il socket è la connessione che si crea tra due computer quando devono inviarsi dei dati.. detta molto banalmente ma il concetto è quello..
intanto in perl dobbiamo usre una libreria particolare per i socket, che è IO::Socket..
per usarla si fa cosi:
per creare un nuovo socket si fa cosi:
nelle dichiarazione della roba che si usa ci sono fondamentalmente questi:
adesso impareremo un po a usare questi comandi...
cominciamo a vedere qualche script di esempio:
il programma non fa altro che creare un socket e poi stampare la richiesta della index (get index.htm).. per stampare una richiesta al socket bisogna scrivere:
se lo eseguite pero non succederàniente...
vediamo come leggere le risposte del socket...:
allora, ho aggiunto solo un ciclo while che ser per entrare in un loop dal quale usciràfinche il server non avra finito di inviarci dati, ovvero finche non avra finito, ovvero finche non ci avra dato tutta la pagina.. poi chiude il socket...
Ora che sappiamo come usare un po un programma che agisce da client vediamo come creare un server..
bene, questo come avete capito è un client, ed ecco (alleluia) il server:
vediamo che è stato usato, nel server, come parametro della creazione del nuovo socket (oltre ai parametri che abbiamo gia visto prima, che sono quelli per il server side (LocalHost e LoacalPort) Listen, e gli abbiamo dato il valore di 1, questo significa che il server resteràin ascolto sulla porta 4444 finche un client non si collegheràa quella porta... questo è, in poche parole, il funzionamento di qualuqnue chat...
invece programmi tipo msn , visto che le discussioni avvengono in privato, ogni copia del programma agisce sia da client che da server, cioe accetta e riceve messaggi.. (almeno, credo che sia cosi..)
spero che questa guida sia utile a qualcuno..
darkjoker
In questa guida non voglio spiegare cosa sia un socket, senno mi allungherei un po, ma basta che cercate due minuti su google e trovate tutte le definizioni possibili...
in poche parole comunque il socket è la connessione che si crea tra due computer quando devono inviarsi dei dati.. detta molto banalmente ma il concetto è quello..
intanto in perl dobbiamo usre una libreria particolare per i socket, che è IO::Socket..
per usarla si fa cosi:
Codice:
#!usr/bin/perl
use IO::Socket;
per creare un nuovo socket si fa cosi:
Codice:
#!usr/bin/perl
use IO::Socket;
my $sock = new IO::Socket::INET (
#
# dichiarazione degli host locali e remoti,
# porte utlizzate e protocolli
#
#
);
Codice:
PeerHost => "nome host", #definisce un'host remoto (lato client)
PeerPort => "porta", #dfinisce la porta di comunicazione (lato client)
LocalHost => "nome host", #definisce l'host locale (lato server)
LocalPort => "porta", #definisce la porta locale (lato server)
Proto => "protocollo", #definisce il protocollo utilizzato (lato server-client)
adesso impareremo un po a usare questi comandi...
cominciamo a vedere qualche script di esempio:
Codice:
#!usr/bin/perl
use IO::Socket;
print "Inserire l'host a cui connettersi:\n";
$host = <STDIN>;
my $sock = new IO::Socket::INET (
PeerHost => $host,
PeerPort => "80",
Proto => "tcp",
);
print $sock "get /index.htm";
close ($sock);
Codice:
print $variabile_del_socket "messaggio";
vediamo come leggere le risposte del socket...:
Codice:
#!usr/bin/perl
use IO::Socket;
print "Inserire l'host a cui connettersi:\n";
$host = <STDIN>;
my $sock = new IO::Socket::INET (
PeerHost => $host,
PeerPort => "80",
Proto => "tcp",
);
print $sock "get /index.htm";
while ( <$sock> ){
print "$_\n";
}
close ($sock);
Ora che sappiamo come usare un po un programma che agisce da client vediamo come creare un server..
Codice:
#!usr/bin/perl
use IO::Socket;
my $sock = new IO::Socket::INET (
PeerHost => "127.0.0.1",
PeerPort => "4444"
Proto => "tcp",
);
print "Che messaggio vuoi mandare al server?\n";
$msg = <STDIN>;
print $sock $msg;
close ($sock);
Codice:
#!usr/bin/perl
use IO::Socket;
my $sock = new IO::Socket::INET (
LocalHost => "127.0.0.1",
LocalPort => "4444",
Proto => "tcp",
Listen => 1,
);
$msg=$sock->accept();
while (<$msg>){
print "$_\n";
}
close ($sock);
invece programmi tipo msn , visto che le discussioni avvengono in privato, ogni copia del programma agisce sia da client che da server, cioe accetta e riceve messaggi.. (almeno, credo che sia cosi..)
spero che questa guida sia utile a qualcuno..
darkjoker