programmazione client/server con il controllo winsock edizione 1.3

49
Programmazione Client/Server con il controllo Winsock Edizione 1.3 a cura di Marco Zucchini

Upload: aulii

Post on 21-Jan-2016

69 views

Category:

Documents


2 download

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

TRANSCRIPT

Page 1: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Programmazione Client/Servercon il controllo Winsock

Edizione 1.3

a cura di Marco Zucchini

Page 2: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Obiettivo generale

• Far dialogare tra di loro due processi in esecuzione su due calcolatori (Host) distinti collegati in rete con protocollo TCP/IP

Page 3: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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.

Page 4: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Implementazione tecnicadella metodologia Client/Server

Le Socket

Page 5: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Connessione

• Identificata da una coppia di socket

Internet

Server Client

TCP/IP

Applicazione Applicazione

TCP/IP

SocketSocket

Page 6: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 7: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Concetto di Socket

• Punto terminale di comunicazione fra processi

• Individuata univocamente da:– Protocollo usato – Indirizzo IP del calcolatore– Un numero di porta

Page 8: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 9: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Schema di comunicazione TCP

Processo A

Processo B

Processo C

Processo D

Page 10: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 11: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 12: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 13: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 14: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Utilizzare le Socket

in Visual Basic 6

Page 15: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Il controllo Winsock

• Controllo OCX di Visual Basic che permette di creare e gestire le socket

Microsoft Winsock Control 6

Progetto -> Componenti

Page 16: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Come programmare il Client ed il Server

Page 17: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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()

Page 18: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 19: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 20: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Metodo ListenServer

• Metodo Listen– Mette il Server in attesa di una richiesta di

connessione da parte di un client

Esempi

ServerSocket.Listen

Page 21: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 22: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 23: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 24: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 25: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 26: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 27: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Metodo CloseClient/Server

• Metodo Close– Termina una connessione TCP.

Esempio

Socket.Close

Page 28: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 29: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Un esempio concreto

Client/Server ECHO

Page 30: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 31: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Il Server

La seguente versione è in grado di accettare e gestire contemporaneamente connessioni da più client, ciascuna

su uno specifico socket .

Page 32: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 33: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 34: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 35: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 36: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Il Client

Page 37: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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()

Page 38: Programmazione Client/Server con il controllo Winsock Edizione 1.3

‘Bottone per l’avvio della connessione

Private Sub cmdConnect_Click()

ClientSocket.Connect

End Sub

Connect()

Page 39: Programmazione Client/Server con il controllo Winsock Edizione 1.3

‘ 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()

Page 40: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Private Sub ClientSocket_DataArrival( ByVal requestID As Long)

ClientSocket.GetData sData, vbString

txtDisplay.Text=sData

End Sub

GetData()

Page 41: Programmazione Client/Server con il controllo Winsock Edizione 1.3

‘ 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()

Page 42: Programmazione Client/Server con il controllo Winsock Edizione 1.3

Appendice

Page 43: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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)

Page 44: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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.

Page 45: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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.

Page 46: Programmazione Client/Server con il controllo Winsock Edizione 1.3

EsercizioFile sharing

• Implementare un sistema Client/Server in grado di consentire la condivisione di file di testo (ed eventualemnte binari) tra più utenti collegati.

Page 47: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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).

Page 48: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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

Page 49: Programmazione Client/Server con il controllo Winsock Edizione 1.3

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