Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Esempio d'uso di P2P Vista Toolkit

In questo precedente post si è parlato un pochino del ruolo del Peer-to-peer in .NET Framework 3.5 e di come questa nuova versione gestisca tali metodologie di comunicazione in maniera ottimale. Abbiamo anche accennato diverse volte all'esistenza del P2P Vista Toolkit, un insieme di controlli utente e librerie open-source realizzato da Microsoft e rilasciato in concomitanza con l'uscita delle edizioni Express di Visual Studio 2008. Questo toolkit rende veramente agevole la creazione di applicazioni di chat e messaggistica, sfruttando la gestione di reti P2P da parte di Windows Communication Foundation, senza scrivere neanche una riga di codice.

Ho ricevuto molte e.mail a riguardo di questo toolkit, alcuni hanno delle perplessità circa il suo funzionamento, che cerchiamo oggi di chiarire. Sfrutteremo, per rendere più facile il discorso, uno degli esempi già pronti che vengono distribuiti insieme al codice.

Innanzitutto dobbiamo fare una considerazione di partenza: la gestione del P2P da parte di .NET Framework si basa sul Peer Name Resolution Protocol, che fa parte integrante di Windows Vista (non a caso il toolkit si chiama P2P Vista). Affinchè possiate utilizzare il toolkit anche su Windows XP, dovete installare il PNRP separatamente seguendo le istruzioni che trovate qui. In parole molto povere, questo protocollo consente di connettersi mediante il recupero dell'identificatore (resolution) di un nodo P2P all'interno della rete.

Dopo questo flash, passiamo alla pratica. Supponiamo di avere due pc diversi che vogliono dialogare tra loro mediante un'applicazione di chat. Il P2P Vista Toolkit è distribuito con tutta una serie di esempi già pronti, basati sia su Windows Forms che su Windows Presentation Foundation, che rappresentano la maggior parte delle necessità (scambio di messaggi, invio di file, foto, immagini, video). Ne prendiamo uno a caso, poichè per una dimostrazione andrebbero bene tutti. Dal menu Start|Programmi, selezionate la cartella C4F Vista P2P Toolkit|Samples|PictureFileChat e, in questa, selezionate l'esempio chiamato (VB Win Forms) Chat File Picture Sample, basata su Windows Forms. Questo, ovviamente, deve essere fatto su entrambi i computer (non è necessario installare il toolkit su entrambi, l'importante è che sia presente il .NET Framework 3.5 e gli eseguibili presenti nella cartella dell'esempio considerato). Prendiamo ora in considerazione il primo pc. Quando lanciate l'applicazione, è possibile che il firewall di Windows (o altro firewall da voi utilizzato) chieda conferma per bloccare o sbloccare l'applicazione. Dovrete necessariamente sbloccarla per consentirne l'esecuzione. All'avvio, l'applicazione si presenta come in figura:

Il campo User Name deve contenere un nickname di vostra scelta. I campi Password e Network Name devono contenere, rispettivamente, una password e un identificatore per la rete a cui tutte le applicazioni che devono dialogare tra loro desiderano connettersi. Ciò comporta che questi due campi devono essere uguali per tutte le istanze dell'applicazione, eseguite sui diversi pc. L'unico campo diverso dovrà essere quello relativo al nickname. Una volta specificate le credenziali, fate clic su Join. In questo momento avviene la magia: tramite WCF, il .NET Framework 3.5 genera, sul primo seed server di Microsoft disponibile, un nuovo nodo P2P che viene identificato dal nome della rete (campo Network Name specificato sopra). Questo si chiama publishing. Ripetete tutte le operazioni sul secondo pc, cambiando solo il nickname. Quando la nuova istanza dell'applicazione viene avviata, e la connessione viene avviata utilizzando le credenziali date, si verifica il processo chiamato resolving, che va a recuperare, nei seed server di Microsoft, il nodo P2P generato in precedenza mediante l'identificatore della rete e la password. Quando entrambe le applicazioni risultano connesse (lo potete verificare dal testo visualizzato nella label chiamata Status, quindi Disconnected o Connected) potete cominciare a chattare. In realtà, non sempre questo è immediato. A volte è necessario attendere anche alcuni minuti prima che questo sia possibile, quindi non disperate se i due client non si "vedono" subito.

Supponiamo di aver atteso qualche minuto e che la connessione al seed server sia stata stabilita. Ecco come il secondo pc riceve un messaggio dal primo e gliene invia uno a sua volta:

Ed ecco, invece, come il primo pc risponda ancora al secondo:

 

Noterete che le due finestre hanno aspetto diverso (su un pc, infatti, è attivo Windows Aero, sull'altro no) e questo vi dimostra che i client sono effettivamente in esecuzione su pc diversi. Dopo aver chattato, possiamo sfruttare la funzionalità di invio file utilizzando il pulsante Select File To Send, sul primo pc. Apparirà una finestra di dialogo dalla quale potete selezionare il file che desiderate inviare a tutti i client connessi. Sul primo pc, quindi, viene mostrato un messaggio di conferma dell'invio del file:

Sul secondo pc, invece, si viene avvisati del fatto che un file è stato inviato e che si deve decidere se accettarlo o meno:

Quando volete interrompere la vostra sessione di chat, fate clic sul pulsante Leave e poi chiudete l'applicazione. Per motivi di spazio non posso inserire ulteriori screenshot, se però vi fidate un pochino di me vi posso dire che sono riuscito a far dialogare due client su OS diversi, uno su XP e uno su Vista, utilizzando il semplice procedimento descritto sopra, senza scrivere una riga di codice. Ho provato anche a far dialogare applicazioni WPF con applicazioni Windows Forms, il tutto è andato a buon fine.

Riporto, anche in questa occasione, il seguente link che si riferisce a una discussione pubblica intrattenuta da me con uno dei program manager del P2P toolkit, che sicuramente potrà esservi utile per chiarirvi altri dubbi e rendere più comprensibili altre problematiche:

http://www.codeplex.com/C4FP2P/Thread/View.aspx?ThreadId=18265

Ad ogni buon conto, ricordo che il P2P Vista Toolkit è corredato da una serie di documenti che spiegano l'utilizzo e le tecnologie che stanno alla base del P2P in .NET Framework 3.5 e che consiglio vivamente di leggere. Infine, in questo post abbiamo visto un esempio di utilizzo di questo fantastico toolkit, ma molto, moltissimo ci sarebbe da dire su quello che c'è dietro le scene. A questo proposito, potete consultare la documentazione a corredo del toolkit e visitare i vari post su questo blog, appartenenti alla categoria Windows Communication Foundation, che non hanno la presunzione di insegnare tecniche avanzate, ma che riportano importanti segnalazioni ad articoli e documenti (anche della libreria MSDN ufficiale) che saranno sufficientemente esaustivi a capire il background tecnologico del PNRP.

Spero che seguendo questi passaggi siate riusciti a risolvere i problemi riscontrati, altrimenti fatemi sapere lasciando commenti a questo post, di modo che siano visibili e di utilità per tutti.

Alessandro

Print | posted on mercoledì 19 dicembre 2007 22:42 | Filed Under [ .NET Framework Visual Basic C# Visual Studio 2008 Windows Presentation Foundation Windows Communication Foundation ]

Powered by:
Powered By Subtext Powered By ASP.NET