Upload
aulii
View
74
Download
2
Embed Size (px)
DESCRIPTION
Programmazione Client/Server con il controllo Winsock Edizione 1.3. a cura di Marco Zucchini. Obiettivo generale. Far dialogare tra di loro due processi in esecuzione su due calcolatori (Host) distinti collegati in rete con protocollo TCP/IP. Obiettivo specifico. - PowerPoint PPT Presentation
Citation preview
Programmazione Client/Servercon il controllo Winsock
Edizione 1.3
a cura di Marco Zucchini
Obiettivo generale
• Far dialogare tra di loro due processi in esecuzione su due calcolatori (Host) distinti collegati in rete con protocollo TCP/IP
Obiettivo specifico
Approfondire la metodologia Client/Server
• Un’ applicazione Server in esecuzione su un determinato calcolatore (collegato in Internet) offre un certo tipo di servizio.
• Più applicazioni Client, si collegano all’applicazione Server per ottenere quello specifico servizio.
Il modo migliore per fare qualcosa è quello di farlo fare a qualcun altro.
Implementazione tecnicadella metodologia Client/Server
Le Socket
Connessione
• Identificata da una coppia di socket
Internet
Server Client
TCP/IP
Applicazione Applicazione
TCP/IP
SocketSocket
Schema dei livelli TCP/IP
Applicazione
Livello Ip
Livello fisico
TCP UDP
Internet
Gateway Gateway
Applicazione
Livello Ip
Livello fisico
TCP UDP
Host A Host B
OSI 3
OSI 4
Concetto di Socket
• Punto terminale di comunicazione fra processi
• Individuata univocamente da:– Protocollo usato – Indirizzo IP del calcolatore– Un numero di porta
Protocollo
• TrasmissionControlProtocol – Stabilisce una
connessione tra client e server
– Garantisce la consegna di tutti pacchetti senza errori
– Più complesso da gestire
– Più lento
• UserDatagramProtocol
• Non stabilisce alcuna connessione
• Non garantisce l’arrivo dei messaggi inviati
• Non garantisce l’ordine di arrivo rispetto a quello di partenza
• Facile da gestire
• Veloce
Identifica il tipo di comunicazione.
N.B. TCP e UDP corrispondono al livello 4 del modello OSI
Con connessione ed affidabile Senza connessione ed inaffidabile
Schema di comunicazione TCP
Processo A
Processo B
Processo C
Processo D
Analogia di connessioneTCP
Conversazione telefonica tra due interlocutori
• Inizia la conversazione solo uno dei due (Client), ovvero colui che conosce il numero di tel. del secondo interlocutore (Server)
• Quindi la conversazione ha modo di proseguire in modo simmetrico
Indirizzo IP
• Identifica univocamente calcolatore connesso in Internet/Intranet
• Identifica dunque il calcolatore su cui è in esecuzione l’applicazione Client o Server da contattare
Esempio (indirizzo IP)192.168.0.1
N.B. L’IP di default di un elaboratore non connesso in rete è 127.0.0.1
La Porta
• Identifica univocamente l’applicazione Client o Server con cui stabilire una connessione
• E’ un numero intero compreso tra 0 e 65535
Esempio (indirizzo IP + porta)
192.168.0.1:80
Porte predefinite
• E’ consuetudine che i servizi Internet più diffusi vengano associati alle stesse porte.
N.ro porta Servizio
21 FTP
23 TELNET
25 SMTP
53 DNS
80 WWW
Utilizzare le Socket
in Visual Basic 6
Il controllo Winsock
• Controllo OCX di Visual Basic che permette di creare e gestire le socket
Microsoft Winsock Control 6
Progetto -> Componenti
Come programmare il Client ed il Server
Schema di chiamate
Imposta_socket()
Listen()
Accept()
GetData()
SendData()
Si blocca sino alla connessione con il client
Imposta_socket()
Connect()
SendData()
GetData()
Elaborazione
Close() Close()
Impostazione del socket - Server• Proprietà LocalHostName
– Restituisce il nome dell’Host localeEsempi sHost= ServerSocket.LocalHostName ‘Ottiene il nome dell’HOST
• Proprietà LocalIP– Restituisce l’IP dell’Host localeEsempi sIP= ServerSocket.LocalIP ‘Ottiene l’IP
• Proprietà LocalPort– Imposta/restituisce il numero della porta locale Esempi ServerSocket.LocalPort=1007 ‘ Imposta la porta lPort= ServerSocket.LocalPort ‘Ottiene il valore della porta
Impostazione del socketClient
• Proprietà RemoteHost– Imposta/restituisce l’IP/DNS dell’Host remoto (Server)Esempi ClientSocket.RemoteHost=“127.0.0.1” ‘Imposta l’IP dell’Host
sHost= ClientSocket.RemoteHost ‘Ottiene l’IP dell’Host
• Proprietà RemotePort– Imposta/restituisce la porta di connessione con il ServerEsempi ClientSocket.RemotePort=1007 ‘ Imposta la porta lPort= ClientSocket.RemotePort ‘Ottiene il valore della porta
Metodo ListenServer
• Metodo Listen– Mette il Server in attesa di una richiesta di
connessione da parte di un client
Esempi
ServerSocket.Listen
Metodo ConnectClient
• Metodo Connect– Consente al Client di richiedere una connessione al
computer remoto– Occorre prima specificare l’indirizzo IP del
computer remoto e la porta a cui connettersi (proprietà RemoteHost e RemotePort)
Esempio
ClientSocket.Connect
Evento ConnectionRequestServer
• Evento ConnectionRequest– Si verifica quando il server riceve una richiesta di
connessione da parte del client.– Il parametro requestID identifica la richiesta di
connessione
Esempio
Private Sub ServerSocket_ConnectionRequest(ByVal RequestID As Long) …..EndSub
Metodo AcceptServer
• Metodo Accept– Consente al server di accettare una richiesta proveniente
da un client.– L’accettazione deve essere fatta nell’ambito della
gestione dell’evento ConnectionRequest– Il parametro RequestID viene passato al metodo Accept
che accetta quella particolare connessione.Esempio
Private Sub ServerSocket_ConnectionRequest(ByVal RequestID As Long) ServerSocket.Accept RequestID
EndSub
Evento DataArrivalClient/Server
• Evento DataArrival– Si verifica quando arrivano nuovi dati.– Il parametro bytesTotal contiene quanti dati (in byte)
sono arrivati
EsempioPrivate Sub ServerSocket_DataArrival(ByVal bytesTotal As Long) …..EndSub
Metodo GetDataClient/Server
• Metodo GetData– Legge i dati contenuti nel buffer di input e li memorizza in una variabile.– Usato in concomitanza conl’evento DataArrival
EsempioPrivate Sub ServerSocket_DataArrival(ByVal bytesTotal As Long) Dim InDataVar As String ….. Socket.GetData InDataVarEndSub
Metodo SendDataClient/Server
• Metodo SendData– Invia i dati specificati in una variabile– Usato in concomitanza conl’evento DataArrival
EsempioPrivate Sub SocketServer_DataArrival(ByVal bytesTotal As Long) Dim OutDataVar As String ….. Socket.SendData OutDataVarEndSub
Metodo CloseClient/Server
• Metodo Close– Termina una connessione TCP.
Esempio
Socket.Close
Proprietà StateClient/Server
• Proprietà State– Restituisce lo stato del Socket – Codice numerico (vedi tabella) cui corrisponde una
costante predefinita.
EsempioiVal=Socket.State
Costante Valore Descrizione
sckClosed 0 Chiuso (default)
sckOpen 1 Aperto
sckConnected 7 Connessione completata
Un esempio concreto
Client/Server ECHO
EsercizioECHO
Implementare un sistema Client/Server costituito da:– Uno o più Client, in grado di:
• connettersi al server
• inviare un messaggio a scelta (es.”ciao”)
• ricevere e visualizzare lo stesso messaggio proveniente dal server.
– Un Server, in grado di:• accettare connessioni da uno o più Client “Echo”
• ricevere i messaggi inviati dai client e rispedirli al mittente
Il Server
La seguente versione è in grado di accettare e gestire contemporaneamente connessioni da più client, ciascuna
su uno specifico socket .
Dim iSockets As Integer
Private Sub Form_Load()
iSockets = 0
frmMain.Show
ServerSocket(0).Protocol=sckTCPProtocol
txtHost.Text=ServerSocket(0).LocalHostName
txtIP.Text=ServerSocket(0).LocalIP
ServerSocket(0).LocalPort = 1007
ServerSocket(0).Listen
End Sub
Imposta_socket()
Listen()
Si blocca sino alla connessione con il client
Private Sub ServerSocket_ConnectionRequest( Index As Integer, _
ByVal requestID As Long)
MsgBox " Pervenuta richiesta di connessione !!! Ok Per accettarla !!!"
If Index = 0 Then ‘ se è un tentativo di connessione al server
iSockets = iSockets + 1
Load ServerSocket(iSockets)
ServerSocket(iSockets).LocalPort = 1007
ServerSocket(iSockets).Accept requestID
End If
End Sub
Accept()
Viene allocato un socket specifico, identificato da Index, per gestire lo scambio di informazioni con il client
Private Sub ServerSocket_DataArrival( Index As Integer, _
ByVal requestID As Long)
Dim sData As String
ServerSocket(Index).GetData sData, vbString
txtDisplay.Text=sData
ServerSocket(Index).SendData sData
End Sub
GetData()
SendData()
Elaborazione
Sul socket identificato da Index viene gestito lo scambio di informazioni con il client
Private Sub ServerSocket_Close ( Index As Integer)
ServerSocket(Index).Close
Unload ServerSocket(Index)
iSockets = iSockets – 1
End Sub
Close()
Viene deallocato il socket identificato da Index che si occupava della connessione con il client
Il Client
Dim sData As String
Private Sub Form_Load()
ClientSocket.Protocol=sckTCPProtocol
ClientSocket.RemoteHost = "127.0.0.1"
ClientSocket.RemotePort = 1007
sData=“Ciao!!!”
End Sub
Imposta_socket()
‘Bottone per l’avvio della connessione
Private Sub cmdConnect_Click()
ClientSocket.Connect
End Sub
Connect()
‘ Bottone per l’invio dei dati
Private Sub cmdSend_Click()
If (ClientSocket.State = sckConnected) Then
ClientSocket.SendData sData
Else
MsgBox "Connessione non attiva !!!"
End If
End Sub
‘Evento di rilevazione avvenuta trasmissione
Private Sub ClientSocket_SendComplete()
txtDisplay.Text = txtDisplay.Text + "Trasmissione completata !!!" + vbCrLf
End Sub
SendData()
Private Sub ClientSocket_DataArrival( ByVal requestID As Long)
ClientSocket.GetData sData, vbString
txtDisplay.Text=sData
End Sub
GetData()
‘ Bottone per la terminazione della connessione
Private Sub cmdClose_Click()
ClientSocket.Close
End Sub
‘ Bottone per la terminazione dell’applicazione
Private Sub cmdEnd_Click()
ClientSocket.Close
End
End Sub
Close()
Appendice
EsercizioRisolutore DNS
Implementare un sistema Client/Server costituito da:– Uno o più Client, in grado di:
• connettersi al server
• inviare un DNS per la decodifica (es.www.isii.it)
• ricevere e visualizzare l’equivalente indirizzo IP o un eventuale messaggio di errore (es. DNS non valido)
– Un Server, in grado di:• accettare connessioni da uno o più Client
• Riconoscere un DNS valido e trasformarlo in un IP equivalente
• Inviare al client richiedente l’IP appena determinato o eventuale messaggio di errore (es. DNS non valido)
EsercizioScanner IP
• Implementare un sistema Client “Scanner” in grado di analizzare eventuali porte aperte da qualche software Server in esecuzione su un generico Host connesso ad internet/intranet.
Esercizio
Client/Server FTP
• Implementare un sistema Client/Server in grado di gestire un servizio FTP, ovvero di trasferire uno o più file da un PC client ad un PC server e viceversa.
EsercizioFile sharing
• Implementare un sistema Client/Server in grado di consentire la condivisione di file di testo (ed eventualemnte binari) tra più utenti collegati.
EsercizioChat multiutente
• Implementare un sistema Client/Server in grado di gestire una Chat multiutente con la possibilità di limitare la comunicazione solo tra alcuni client connessi (virtual rooms).
EsercizioClient/Server WEB• Implementare un sistema Client/Server Web
composto da quanto segue:• un server web capace di inviare pagine html a
client web (browser) che ne fanno richiesta• Un’applicazione Client Web capace di:
– richiedere pagine html al server di cui sopra– ricevere tali pagine, interpretarne il contenuto (espresso
secondo una sintassi html minimale) ed eseguire quanto espresso dai tag incontrati
– gestire problematiche di errore visualizzando messaggi opportuni
Bibliografia
R.Thayer
Visual Basic 6
Apogeo
A. Tanenbaum
Reti di Computer (II Ed.)
G.E.Jackson
Dev Ottobre 1996
Internet Programming & Client/Server
Edizioni Infomedia
Sul Web
• http://www.vbp.it
• http://www.redangel.it