Newsgroup: it.comp.www.php
Titolo: Cosa sono i socket?

Qualcuno č cosě gentile da spiegarmi con semplici parole cosa sono i socket?
Magari anche con qualche esempio.
Grazie Moana

 Magari anche con qualche esempio.
Non sono una cima in materia, ma fintantochè nessuno risponde, accontentati
di pensarla così:
Il tuo server, così come il tuo client è dotato di centinaia di porte dal
quale accedere, le pagine web ad esempio accedono da una porta, i messenger
come aol e icq accedono da un altra. Alcune porte sono riservate (esempio se
non mi sbaglio la porta 21 è l'ftp) altre porte sono libere, non mi chiedere
quante siano in tutto.. perchè non ne ho la minima idea (oltre le 10.000),
anche i trojan e i virus sfruttano le porte. Se non hai la minima idea di
cosa è una porta, pensala così: la connessione al tuo computer ha tante
linee telefoniche distinte quante sono le tue porte, questo succede infatti
per evitare conflitti di trasmissione (pensa se si sovrapponessero i dati di
ricezione di un messenger con una pagina web), così puoi navigare sul web da
una porta, leggere la posta da un altra, stare su icq mentre scarichi un
file da winmx e al contempo scaricarti gli aggiornamenti del tuo antivirus
;)
Poichè Php dispone di un modulo per aprire le porte, possiamo praticamente
'occupare' una linea telefonica a nostro piacimento. Ad esempio possiamo
controllare che un sito web sia registrato, se infatti all'apertura della
socket che gestisce l'http (non vorrei dire cazzate ma è la 8080?), di un
dominio 
www.dominio.com
 si ottiene una risposta, allora in quel caso il
dominio è da considerarsi registrato. Ma ci sono tantissime cose che puoi
fare con una socket.
Spero di non aver scritto troppe scemenze ;)
apollo


Ciao,
immagino che tu intenda i socket tcp/ip anche perche' non ne conosco 
altri. :-)
I socket sono canali di comunicazione che si possono aprire ad esempio 
tra due programmi, di solito tra un server ed un client e attraverso cui 
si scambiano le informazioni.
Il canale e' bidirezionale, cioe' puoi inviare e ricevere allo stesso 
tempo ma in realta' poi non lo fa quasi nessuno. Di solito tutti i 
protocolli di livello piu' alto (HTTP, FTP, SMTP, POP3) che sono basati 
sui socket tcp/ip usano un meccanismo semplice, invii la richiesta e ti 
mando la risposta... :-)
Penso che sia utile sapere che ad ogni socket e' ovviamente associato 
l'indirizzo (IP) del chiamante e del ricevente e anche (importante) la 
porta del chiamante e del ricevente se magari questo concetto non ti e' 
chiaro ne possiamo riparlare piu' approfonditamente un'altra volta.
Infine e' importante dire che i socket sono sicuri, cioe' se da un lato 
della connessione il socket ti avvisa che ha inviato, che ne so, 200 
byte e' perche' dall'altra parte li hanno realmente ricevuti e questo e' 
molto importante quando hai bisogno di trasferire grandi quantita' 
d'informazioni in modo sicuro. Il fatto che poi non tutti i programmi si 
avvalgano di queste proprieta' per inviare i dati e' un altro 
discorso... eh eh eh.
Vabbe' spero di essere stato chiaro.
Ciao,
Vincenzo

 ha scritto nel messaggio
news:3E2C66D3...@altern.org...


 > > Qualcuno è così gentile da spiegarmi con semplici parole cosa sono i


Grazie per l'aggiunta e la correzione. Ho RTFM quindi mi sono 
documentato e... ho scoperto che quello che erroneamente associavo solo 
al tcp/ip è un ciccinin piu' compliche'...
Beh, sono stato tentato di fare un triviale copia e incolla mentre 
invece ti giro i link al sito ed in particolare alla parte di 
introduzione ai socket.
Il tipo, o stile (beh, qui si scopre che oltre ai due (tcp/udp) citati 
ce ne sono altri quattro)
http://gapil.firenze.linux.it/html/node268.html
e piu' importante (sembra) il dominio o protocol family
http://gapil.firenze.linux.it/html/node267.html
E onestamente da quello che ho letto immagino che siano poco utilizzati.
Ah, tutto cio' e' estratto da:
GaPiL - Guida alla Programmazione in Linux
http://gapil.firenze.linux.it/html/gapil.html


 ha scritto nel messaggio
news:3E2CCB57...@altern.org...

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.443 / Virus Database: 248 - Release Date: 10/01/2003

 mando la risposta... :-)
cosa altro intenderesti per bidirezionale, scusa ?? :D
ciao
Alesi_27


un socket č una entitŕ software che rappresenta una estremitŕ di un 
"tubo digitale" nel quale viaggiano le informazioni tra 2 applicazioni.
Puoi aprire un socket (da programma scritto in qualsiasi linguaggio di 
programmazione) per metterlo in ascolto di richieste su una qualsiasi 
porta che non sia giŕ occupata da un altro servizio (solitamente i 
socket "utente" dovrebbero andare su porte superiori alla 1024, al di 
sotto ci sono le "well known port" ossia servizi che convenzionalmente 
si associano a determinati numeri di porta)
I socket si appoggiano ai protocolli di rete definiti sul sistema 
operativo (es. tcp/ip)
In pratica i socket sono lo strumento per il programmatore per 
sviluppare applicazioni di rete (ma girano ugualmente anche tra 2 
applicazioni sulla stessa macchina) senza doversi preoccupare di mandare 
segnali di controllo e quant'altro, a questo ci pensano direttamente i 
livelli sottostanti.
boh non so che altro dirti, se vuoi chiedi pure
ciao
Alesi_27

> boh non so che altro dirti, se vuoi chiedi pure
Un esempio? Magari un'applicazione già in funzione.
Grazie
Moana


Esempi di applicazioni che usano i socket sono praticamente infiniti
basti pensare a server web, browser, telnet, ftp, programmi di sharing 
di file, insomma qualsiasi cosa faccia uso di connessioni di rete 
(locali o remote è identico)
se vuoi un esempio posso fornirtelo in java:
import java.io.*;
import java.net.*;
public class SimpleServer   {
//--------------------------------------------------
     public static void main(String args[]) {
         ServerSocket server;
         Socket client;
         String inputLine;
         DataInputStream is = null;
         PrintStream os = null;
         try {
             server = new ServerSocket(6000);
             System.out.println("Accepting one connection...");
             client = server.accept();
             server.close();
             System.out.println("Connection from one client accepted.");
             is = new DataInputStream(client.getInputStream());
             os = new PrintStream(client.getOutputStream());
             os.println("From SimpleServer: Welcome!");
             while ((inputLine = is.readLine()) != null) {
                 System.out.println("Received: " + inputLine);
                 os.println("From SimpleServer: " + inputLine);
             }
             is.close();
             os.close();
             client.close();
             System.out.println("Connection closed.");
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
}
per eseguirlo:
copia incolla in un file di testo chiamato "SimpleServer.java".
Da prompt dei comandi recati nella directory che contiene il file che 
hai salvato, poi compila il sorgente con:
javac SimpleServer.java
dopodichè mandi in esecuzione il server con:
java SimpleServer
ora apri un Telnet (start->esegui->telnet 
127.0.0.1:6000
) e fai 
esperimenti digitando qualcosa nel telnet. Dovresti vedere apparire 
quello che digiti sul prompt del dos e nella finestra del telnet.
Cmq se vuoi saperne qualcosina di più guarda qui:
http://cesare.dsi.uniroma1.it/~reti/Reti2_html/toc.html
ciao
Alesi_27