<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Visual C#.it News &#187; Networking</title>
	<atom:link href="http://visualcsharp.it/news/category/networking/feed/" rel="self" type="application/rss+xml" />
	<link>http://visualcsharp.it/news</link>
	<description>Il blog della comunità italiana del linguaggio C#</description>
	<lastBuildDate>Sat, 12 Dec 2009 09:01:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Monitorare lo stato delle connessioni</title>
		<link>http://visualcsharp.it/news/2008/01/26/monitorare-lo-stato-delle-connessioni/</link>
		<comments>http://visualcsharp.it/news/2008/01/26/monitorare-lo-stato-delle-connessioni/#comments</comments>
		<pubDate>Sat, 26 Jan 2008 11:03:25 +0000</pubDate>
		<dc:creator>Sergio79</dc:creator>
				<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Articoli]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[connessioni]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[tcp]]></category>
		<category><![CDATA[udp]]></category>

		<guid isPermaLink="false">http://visualcsharp.it/2008/01/26/monitorare-lo-stato-delle-connessioni/</guid>
		<description><![CDATA[In alcuni casi potrebbe essere utile ottenere informazioni generiche, ma anche dettagliate, riguardo i vari stati di tutte le connessioni presenti sul nostro sistema in riferimento a più protocolli di rete. Esistono diversi modi per raggiungere questo scopo ed uno dei più rapidi ci viene offerto dalla versione 2.0 del .NET Framework con la classe [...]]]></description>
			<content:encoded><![CDATA[<p>In alcuni casi potrebbe essere utile ottenere informazioni generiche, ma anche dettagliate, riguardo i vari stati di tutte le connessioni presenti sul nostro sistema in riferimento a più protocolli di rete.</p>
<p>Esistono diversi modi per raggiungere questo scopo ed uno dei più rapidi ci viene offerto dalla versione 2.0 del .NET Framework con la classe IPGlobalProperties (namespace System.Net.NetworkInformation), in particolare sfruttando il metodo statico GetIPGlobalProperties().</p>
<p><span id="more-14"></span></p>
<p>Con l&#8217;esempio riportato di seguito è possibile ricavare lo stato di tutte le connessioni Tcp e Udp attraverso un&#8217;istanza della classe IPGlobalProperties, la quale ci metterà a disposizione vari metodi, tra cui quelli che più ci interessano:</p>
<ul>
<li><strong>TCP attive:</strong> GetActiveTcpConnections(); <em>restituisce una matrice di tipo TcpConnectionInformation</em></li>
<li><strong>TCP in ascolto:</strong> GetActiveTcpListeners(); <em>restituisce una matrice di tipo IPEndPoint</em></li>
<li><strong>UDP:</strong> GetActiveUdpListeners(); <em>restituisce una matrice di tipo IPEndPoint</em></li>
</ul>
<p>L&#8217;oggetto IPGlobalProperties lo otteniamo attraverso una chiamata al metodo statico GetIPGlobalProperties().<br />
Ottenuta l&#8217;istanza, chiameremo i metodi sopra citati e attraverso gli oggetti restituiti (matrici di tipo TcpConnectionInformation e IPEndPoint) avremo accesso ai vari stati delle nostre connessioni.</p>
<pre name="code" class="c-sharp">
using System.Net.NetworkInformation;  

namespace Sergio79
{
    public class SocketsInfo
    {
        private TcpConnectionInformation[] activeTcp;  //connessioni tcp attive
        private System.Net.IPEndPoint[] listenTcp;       //connessioni tcp in ascolto
        private System.Net.IPEndPoint[] udp;              //connessioni udp (tutte)  

        //Proprietà: elenco proprietà di sola lettura
        public int LengthActiveTcp
        {
            get { try { return activeTcp.Length; } catch { return 0; } }
        }  

        public int LengthListenTcp
        {
            get { try { return listenTcp.Length; } catch { return 0; } }
        }  

        public int LengthUdp
        {
            get { try { return udp.Length; } catch { return 0; } }
        }  

        //Costruttore: inizializzo i campi
        public SocketsInfo()
        {
            GetAll();
        }  

        //Metodo: inizializza e aggiorna tutti i campi
        private void GetAll()
        {
            try
            {
                activeTcp = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections();
                listenTcp = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners();
                udp = IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners();
            }
            catch { }
        }  

        //Aggiornamento informazioni sockets
        public void Update()
        {
            GetAll();
        }  

        //Metodo: restituzione matrice string per info connessioni tcp attive
        public string[,] GetActiveTcp()
        {
            try
            {
                string[,] infoActiveTcp = new string[activeTcp.Length, 4];  

                for (int i = 0; i &lt; activeTcp.Length; i++)
                {
                    infoActiveTcp[i, 0] = "Tcp";
                    infoActiveTcp[i, 1] = activeTcp[i].LocalEndPoint.ToString();
                    infoActiveTcp[i, 2] = activeTcp[i].RemoteEndPoint.ToString();
                    infoActiveTcp[i, 3] = activeTcp[i].State.ToString();
                }  

                return infoActiveTcp;
            }
            catch { return null; }
        }  

        //Metodo: restituzione matrice string per info connessioni tcp in ascolto
        public string[,] GetListenTcp()
        {
            try
            {
                string[,] infoListenTcp = new string[listenTcp.Length, 4];  

                for (int i = 0; i &lt; listenTcp.Length; i++)
                {
                    infoListenTcp[i, 0] = "Tcp";
                    infoListenTcp[i, 1] = listenTcp[i].ToString();
                    infoListenTcp[i, 2] = "0.0.0.0:0";
                    infoListenTcp[i, 3] = "Listening";
                }  

                return infoListenTcp;
            }
            catch { return null; }
        }  

        //Metodo: restituzione matrice string per info connessioni udp
        public string[,] GetUdp()
        {
            try
            {
                string[,] infoUdp = new string[udp.Length, 3];  

                for (int i = 0; i &lt; udp.Length; i++)
                {
                    infoUdp[i, 0] = "Udp";
                    infoUdp[i, 1] = udp[i].ToString();
                    infoUdp[i, 2] = "*:*";
                }  

                return infoUdp;
            }
            catch { return null; }
        }  

        //Metodo: visualizzo lo stato di connessione su porta specifica
        public string ConnectedUserOnTcp(int port)
        {
            try
            {
                GetAll();  

                for (int i = 0; i &lt; activeTcp.Length; i++)
                {
                    //trovo la porta
                    if (activeTcp[i].LocalEndPoint.Port == port)
                    {
                        //verifico se lo stato è attivo
                        if (activeTcp[i].State == TcpState.Established)
                        {
                            return "User: " + activeTcp[i].RemoteEndPoint.Address.ToString();
                        }
                    }
                }  

                return "User: No-one";
            }
            catch { return "User: Error - Unknow"; }
        }
    }
}</pre>
<p>Uno dei possibili utilizzi di questa classe può trovare riscontro in applicazioni di tipo client-server che sfruttino oggetti Socket su protocollo Tcp. Quasi sempre infatti, capita di voler essere costantemente aggiornati sullo stato di connessione diretta della nostra applicazione, ad esempio durante uno stato di attesa di invio o ricezione dati.</p>
<p>Benché in questi casi Microsoft consigli la verifica dei NativeErrocCode in seguito a chiamate non bloccanti al metodo Send(..) a zero byte, l&#8217;esito potrebbe non essere veritiero: client o server potrebbero terminare la loro esezuione in modo anomalo (e non solo), impostando lo stato di connessione ad esempio su Time_Wait o Fin_Wait, dove di fatto non vi sarebbe più una comunicazione diretta tra le due applicazioni, ma ciò non risulterebbe dal NativeErrorCode.</p>
<p>Ecco allora che può venirci in aiuto il metodo ConnectedUserOnTcp(int port), verificando proprio lo stato di connessione e dando esito positivo (attraverso una stringa, ma modificando opportunamente il codice anche tramite un valore di tipo bool) soltanto nel caso in cui essa risulti come &#8220;Established&#8221;.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Condivi questo articolo:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.bloglines.com/sub/http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F" rel="nofollow" title="Aggiungi a&nbsp;Bloglines"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/bloglines.png" title="Aggiungi a&nbsp;Bloglines" alt="Aggiungi a&nbsp;Bloglines" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F&amp;submitHeadline=Monitorare+lo+stato+delle+connessioni&amp;submitSummary=" rel="nofollow" title="Aggiungi a&nbsp;Buzz"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/buzz.png" title="Aggiungi a&nbsp;Buzz" alt="Aggiungi a&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F&amp;title=Monitorare+lo+stato+delle+connessioni" rel="nofollow" title="Aggiungi a&nbsp;Del.icio.us"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/delicious.png" title="Aggiungi a&nbsp;Del.icio.us" alt="Aggiungi a&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F&amp;title=Monitorare+lo+stato+delle+connessioni" rel="nofollow" title="Aggiungi a&nbsp;digg"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/digg.png" title="Aggiungi a&nbsp;digg" alt="Aggiungi a&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F&amp;title=Monitorare+lo+stato+delle+connessioni" rel="nofollow" title="Aggiungi a&nbsp;DotNetKicks"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/dotnetkicks.png" title="Aggiungi a&nbsp;DotNetKicks" alt="Aggiungi a&nbsp;DotNetKicks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.dzone.com/links/add.html?description=Monitorare+lo+stato+delle+connessioni&amp;url=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F&amp;title=Monitorare+lo+stato+delle+connessioni" rel="nofollow" title="Aggiungi a&nbsp;DZone"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/dzone.png" title="Aggiungi a&nbsp;DZone" alt="Aggiungi a&nbsp;DZone" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F" rel="nofollow" title="Aggiungi a&nbsp;Facebook"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/facebook.png" title="Aggiungi a&nbsp;Facebook" alt="Aggiungi a&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F&amp;title=Monitorare+lo+stato+delle+connessioni" rel="nofollow" title="Aggiungi a&nbsp;Google Bookmarks"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/google.png" title="Aggiungi a&nbsp;Google Bookmarks" alt="Aggiungi a&nbsp;Google Bookmarks" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F&amp;title=Monitorare+lo+stato+delle+connessioni" rel="nofollow" title="Aggiungi a&nbsp;reddit"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/reddit.png" title="Aggiungi a&nbsp;reddit" alt="Aggiungi a&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://slashdot.org/bookmark.pl?url=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F&amp;title=Monitorare+lo+stato+delle+connessioni" rel="nofollow" title="Aggiungi a&nbsp;Slashdot"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/slashdot.png" title="Aggiungi a&nbsp;Slashdot" alt="Aggiungi a&nbsp;Slashdot" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F&amp;title=Monitorare+lo+stato+delle+connessioni" rel="nofollow" title="Aggiungi a&nbsp;Stumble Upon"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Aggiungi a&nbsp;Stumble Upon" alt="Aggiungi a&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.squidoo.com/lensmaster/bookmark?http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F" rel="nofollow" title="Aggiungi a&nbsp;Squidoo"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/squidoo.png" title="Aggiungi a&nbsp;Squidoo" alt="Aggiungi a&nbsp;Squidoo" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F" rel="nofollow" title="Aggiungi a&nbsp;SphereIt"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Aggiungi a&nbsp;SphereIt" alt="Aggiungi a&nbsp;SphereIt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F" rel="nofollow" title="Aggiungi a&nbsp;Technorati"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/technorati.png" title="Aggiungi a&nbsp;Technorati" alt="Aggiungi a&nbsp;Technorati" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Monitorare+lo+stato+delle+connessioni+@+http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F" rel="nofollow" title="Aggiungi a&nbsp;Twitter"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/twitter.png" title="Aggiungi a&nbsp;Twitter" alt="Aggiungi a&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fvisualcsharp.it%2Fnews%2F2008%2F01%2F26%2Fmonitorare-lo-stato-delle-connessioni%2F&amp;t=Monitorare+lo+stato+delle+connessioni" rel="nofollow" title="Aggiungi a&nbsp;Yahoo My Web"><img class="social_img" src="http://visualcsharp.it/news/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Aggiungi a&nbsp;Yahoo My Web" alt="Aggiungi a&nbsp;Yahoo My Web" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://visualcsharp.it/news/2008/01/26/monitorare-lo-stato-delle-connessioni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
