Kalau kita perhatikan di website ataupun blog sudah banyak para MVP, SA, Dev ataupun architect membahas fitur-fitur baru dibagian language dan fitur Generics paling banyak dibicarakan. Kali ini saya mencoba membahas fitur baru dari .NET Framework 2.0 dari sudut Networking library. Semua kelas-kelas barunya ada didalam namesapace System.Net dan System.Net.NetworkInformation.
Ping
.NET Framework 2.0 sudah menambahkan kelas Ping untuk mengijinkan aplikasi untuk menentukan apakah komputer yang ada dijaringan itu dapat diakses atau tidak.Ini mirip seperti kita melakukan ping pada commandline. Kelas Ping ini juga support untuk pemanggilan synchronous and asynchronous. Berikut ini contoh synchronous Ping :
using System;
using System.Text;
using System.Net;
using System.Net.NetworkInformation;
namespace ConsoleTestApp
{
class Program
{
static void Main(string[] args)
{
Ping ping = new Ping();
PingOptions config = new PingOptions();
config.DontFragment = true;
string data = "test";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 60;
PingReply reply = ping.Send("192.168.0.5", timeout, buffer, config);
if (reply.Status == IPStatus.Success)
{
// success
// do something
}
}
}
}
Berikut ini contoh Asynchronous Ping :
using System;
using System.Text;
using System.Net;
using System.Net.NetworkInformation;
namespace ConsoleTest2
{
class Program
{
static void Main(string[] args)
{
Ping ping = new Ping();
PingOptions config = new PingOptions();
config.DontFragment = true;
string data = "test";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 60;
ping.PingCompleted += new PingCompletedEventHandler(ping_PingCompleted);
PingReply reply = ping.Send("192.168.0.5", timeout, buffer, config);
}
static void ping_PingCompleted(object sender, PingCompletedEventArgs e)
{
if (e.Error != null)
{
// success
// do something
}
}
}
}
Computer Network Configuration
YEah..it's new feature. Dengan fitur ini kita dapat memperoleh konfigurasi networking yang ada di komputer yang dapat dilakukan dengan kelas-kelas yang ada di namespace System.Net.NetworkInformation . Ini mirip dengan kita lakukan yaitu ipconfig pada commandline dan kalau di .NET 2.0 bisa dilakukan pada kelas NetworkInterface
Berikut ini contoh code nya:
using System;
using System.Net.NetworkInformation;
namespace ConsoleTest3
{
class Program
{
static void Main(string[] args)
{
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in adapters)
{
Console.WriteLine(adapter.Description);
Console.WriteLine("");
}
Console.ReadLine();
}
}
}
FTP Support
Sekarang .NET Framework 2.0 sudah dilengkapi dengan FTP client yang dapat dilakukan oleh kelas FtpWebRequest dan FtpWebResponse.
contoh implementasi code nya:
using System;
using System.IO;
using System.Net;
using System.Text;
namespace ConsoleTest4
{
class Program
{
static void Main(string[] args)
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://akur/mydata");
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
// ambil response
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Console.WriteLine("Response: {0}", response.StatusDescription);
// ambil list file + directory
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string responseFromServer = reader.ReadToEnd();
Console.WriteLine(responseFromServer);
reader.Close();
stream.Close();
response.Close();
Console.ReadLine();
}
}
}
hasil contoh outputnya:

Processing HTTP Requests from Within Applications
Wow..dengan fitur ini kita bisa membuat aplikasi Web server...do you know? kalau VS 2005 menggunakan fitur ini untuk membuat web server ketika membuat project ASP.NET 2.0 sehingga ASP.NET dengan tool VS 2005 tidak perlu menggunakan IIS ;). .NET Framework 2.0 memberikan "gula surga" ini melalui kelas HttpListener. Berikut ini contoh cara membuat web server
using System;
using System.Net;
namespace ConsoleTest5
{
class Program
{
static void Main(string[] args)
{
if (!HttpListener.IsSupported)
{
Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
return;
}
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://localhost:2005/agus/");
listener.Start();
Console.WriteLine("Server is listening...");
HttpListenerContext context = listener.GetContext();
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
string responseString = " Selamat Datang!
Salam dari Agus Kurniawan :p
";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
response.ContentLength64 = buffer.Length;
System.IO.Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
listener.Stop();
Console.WriteLine("Server stopped");
Console.ReadLine();
}
}
}
berikut ini output server

kemudian kita buka browser dan ketik http://localhost:2005/agus maka akan muncul seperti dibawah ini

Detecting Changes in Network Connectivity
Dengan memanfaatkan kelas NetworkChange, aplikasi kita dapat menerima notifikasi jika IP address komputer kita berubah bahkan sampai disconnected. Berikut ini cara penggunaannya:
using System;
using System.Net;
using System.Net.NetworkInformation;
namespace ConsoleTest6
{
class Program
{
static void Main(string[] args)
{
NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(IPChanged);
NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(AvailabilityChanged);
}
static void AvailabilityChanged(object sender, NetworkAvailabilityEventArgs e)
{
if(e.IsAvailable)
Console.WriteLine("Connected");
else
Console.WriteLine("Disconnected");
}
static void IPChanged(object sender, EventArgs e)
{
Console.WriteLine("IP Address berubah");
}
}
}
Authenticated Streams
.NET Framework 2.0 juga memberikan perhatian pada security pada networking yaitu dengan adanya kelas NegotiateStream dan SslStream yang memungkinkan untuk authenticate ke server via protocol SSL. Disamping itu, kita bisa tukar-menukar public key. Untuk implementasi code..next, I'll provide code;)
IPv6 Address Support
.NET Framework 2.0 sudah support untuk protocol yang berbasis IPv6 artinya aplikasi kita bisa melakukan koneksi ke server yang menerapkan IPv6. Tidak hanya kelas-kelas socket yang support IPv6 tetapi juga .NET Remoting juga support untuk protocol TCP based on IPv6.