Socket in Perl

Stato
Discussione chiusa ad ulteriori risposte.

imported_darkjoker

Utente Silver
14 Settembre 2007
9
1
0
61
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:
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
#
#
);
nelle dichiarazione della roba che si usa ci sono fondamentalmente questi:
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);
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:
Codice:
print $variabile_del_socket "messaggio";
se lo eseguite pero non succederà niente...
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);
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.. :D

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);
bene, questo come avete capito è un client, ed ecco (alleluia) il server:
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);
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
 
qualcuno saprebbe fare lo stesso per il c++??ossia un tutorial breve e conciso come questo?

edit: per lo stesso argomento naturalmente..
 
BlackLight ha detto:
Eh eh voglio parte del copyright...
XD pero dal tuo tutorial non ho copiato niente.. anche se i programmi li ho fatti vagamente :)look:) simili ai tuoi... :D

@zarkain: la guida è breve perche.. sui socket so solo questo xD
[ot]no vabbe so qualcos'altro ma ieri sera mentre scrivevo la guida ero su msn, guardavo un film e navigavo un po in giro.. [/ot]
 
@darkjoker:l'importante che sia esauriente ^^' a me è piaciuta anche se sono novizio
 
Riup: Complimenti, bella guida, ho letto la tua e quella di BlackLight, e mi sono sembrate abbastanza complete. Infernet direi di Stickare come importante, dato che cercando su google esce troppa documentazione inglese. Così mi è sembrato doveroso riportare questa guida alla luce :D

Propongo Stick^^
 
Stato
Discussione chiusa ad ulteriori risposte.