1 / 49

Programmazione Client/Server con il controllo Winsock Edizione 1.3

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.

aulii
Download Presentation

Programmazione Client/Server con il controllo Winsock Edizione 1.3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmazione Client/Servercon il controllo WinsockEdizione 1.3 a cura di Marco Zucchini

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

  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.

  4. Implementazione tecnicadella metodologia Client/Server Le Socket

  5. Connessione • Identificata da una coppia di socket Applicazione Applicazione Socket Socket TCP/IP TCP/IP Internet Client Server

  6. Schema dei livelli TCP/IP Applicazione Applicazione TCP UDP TCP UDP OSI 4 Livello Ip Livello Ip OSI 3 Livello fisico Livello fisico Host B Host A Gateway Gateway Internet

  7. Concetto di Socket • Punto terminale di comunicazione fra processi • Individuata univocamente da: • Protocollo usato • Indirizzo IP del calcolatore • Un numero di porta

  8. Protocollo Identifica il tipo di comunicazione. Con connessione ed affidabile Senza connessione ed inaffidabile • 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 N.B. TCP e UDP corrispondono al livello 4 del modello OSI

  9. Schema di comunicazione TCP Processo A Processo C Processo B Processo D

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

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

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

  13. N.ro porta Servizio 21 FTP 23 TELNET 25 SMTP 53 DNS 80 WWW Porte predefinite • E’ consuetudine che i servizi Internet più diffusi vengano associati alle stesse porte.

  14. Utilizzare le Socket in Visual Basic 6

  15. Il controllo Winsock • Controllo OCX di Visual Basic che permette di creare e gestire le socket Progetto -> Componenti Microsoft Winsock Control 6

  16. Come programmare il Client ed il Server

  17. Schema di chiamate Server Client Imposta_socket() Listen() Si blocca sino alla connessione con il client Imposta_socket() Connect() Accept() GetData() SendData() R/W Elaborazione SendData() GetData() Close() Close()

  18. Impostazione del socket - Server • Proprietà LocalHostName • Restituisce il nome dell’Host locale Esempi sHost= ServerSocket.LocalHostName ‘Ottiene il nome dell’HOST • Proprietà LocalIP • Restituisce l’IP dell’Host locale Esempi 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

  19. 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 Server Esempi ClientSocket.RemotePort=1007 ‘ Imposta la porta lPort= ClientSocket.RemotePort ‘Ottiene il valore della porta

  20. Metodo ListenServer • Metodo Listen • Mette il Server in attesa di una richiesta di connessione da parte di un client Esempi ServerSocket.Listen

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

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

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

  24. Evento DataArrivalClient/Server • Evento DataArrival • Si verifica quando arrivano nuovi dati. • Il parametro bytesTotal contiene quanti dati (in byte) sono arrivati Esempio • Private Sub ServerSocket_DataArrival(ByVal bytesTotal As Long) • ….. • EndSub

  25. 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 Esempio Private Sub ServerSocket_DataArrival(ByVal bytesTotal As Long) Dim InDataVar As String ….. Socket.GetData InDataVar EndSub

  26. Metodo SendDataClient/Server • Metodo SendData • Invia i dati specificati in una variabile • Usato in concomitanza conl’evento DataArrival Esempio Private Sub SocketServer_DataArrival(ByVal bytesTotal As Long) Dim OutDataVar As String ….. Socket.SendData OutDataVar EndSub

  27. Metodo CloseClient/Server • Metodo Close • Termina una connessione TCP. Esempio Socket.Close

  28. Costante Valore Descrizione sckClosed 0 Chiuso (default) sckOpen 1 Aperto sckConnected 7 Connessione completata Proprietà StateClient/Server • Proprietà State • Restituisce lo stato del Socket • Codice numerico (vedi tabella) cui corrisponde una costante predefinita. Esempio iVal=Socket.State

  29. Un esempio concreto Client/Server ECHO

  30. Esercizio ECHO 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

  31. Il Server La seguente versione è in grado di accettare e gestire contemporaneamente connessioni da più client, ciascuna su uno specifico socket .

  32. 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 Server Imposta_socket() Listen() Si blocca sino alla connessione con il client

  33. Server 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

  34. Server 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() Elaborazione SendData() Sul socket identificato da Index viene gestito lo scambio di informazioni con il client

  35. Server 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

  36. Il Client

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

  38. Client ‘Bottone per l’avvio della connessione Private Sub cmdConnect_Click() ClientSocket.Connect End Sub Connect()

  39. ‘ 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 Client SendData()

  40. Client Private Sub ClientSocket_DataArrival( ByVal requestID As Long) ClientSocket.GetData sData, vbString txtDisplay.Text=sData End Sub GetData()

  41. Client ‘ 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()

  42. Appendice

  43. Esercizio Risolutore 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)

  44. Esercizio Scanner 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.

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

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

  47. Esercizio Chat 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).

  48. Esercizio Client/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

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

More Related