ネットワークを利用する
ネットワークを利用するために必要なクラスについて学んでいき行くことにしましょう。ネットワークを利用するためには、Webの知識だけでなく、ネットワークの向こう側のコンピュータやファイルのありかを指定する方法などを知らなければなりません。C#プログラムを作成するときには、こうしたネットワークの基礎的な機能を使うことが欠かせないものとなっています。
ネットワークを扱うための基本のクラスは、System.Net名前空間にまとめられています。早速使ってみることにしましょう。
IPアドレスを知る
まず、インターネットに接続されているコンピューターなどの機器を指定する方法を覚えることにしましょう。この指定は、IPアドレス(Internet Protocol Address)と呼ばれています。IPアドレスは、ネットワークに接続される機器を特定する32ビットまたは128ビットの数値のことをいいます。
210.X.136.2x
ただし、IPアドレスは大変覚えにくい数値であるため、人間にわかりやすい文字列を割り当てて使うことがあります。これをホスト(host name)またはドメイン名(domain name)と呼びます。
softbank.co.jp
例えば「softbank.co.jp」と言うホスト名を「 210.X.136.2x 」というIPアドレスの代わりに使うことができます。
ではさっそく、お使いのマシンのIPアドレスを表示してみることにしましょう。Dnsクラスを利用すると、アドレスを表示することができます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
namespace lesoon10
{
class sample1:Form
{
private Label lb1, lb2;
static void Main(string[] args)
{
Application.Run(new sample1());
}
public sample1()
{
this.Text = "lesson10"; this.Width = 300; this.Height = 100;
string hn = Dns.GetHostName();//実行中のマシンのホスト名を取得します
IPHostEntry ih = Dns.GetHostEntry(hn);//インターネットアドレスのリストを得ます
IPAddress ia = ih.AddressList[0];
lb1 = new Label();
lb2 = new Label();
lb1.Width = 300; lb1.Top = 0; lb1.Text = "ホスト:" + hn;
lb2.Width = 300; lb2.Top = lb1.Bottom; lb2.Text = "IPアドレス:" + ia.ToString();
lb1.Parent = this;
lb2.Parent = this;
}
}
}

このプログラムでは、
① 実行中のマシンのホスト名を得る
② ①からのIPアドレスのリストを得る
と言う処理をしています。画面上に、ホスト名とIPアドレスが表示されることがわかります。ここではアドレスリストのうち最初のアドレスを表示することにしています。
| クラス | 説明 |
|---|---|
| System.Net.Dnsクラス | |
| string GetHostName()メソッド | ホスト名を返す |
| IPHostEntry GetHostEntry()メソッド | アドレスリストを取得する |
| System.Net.IPHostEntry クラス | |
| AddressListプロパティ | アドレスリストを取得する |
ホスト名とIPアドレスの対応を取得することができます。
ホスト名とIPアドレスとの対応関係で、通常、DNS(Domain Name System)と呼ばれるサービスを提供するサーバーによって管理されています。
softbank.co.jp 210.x.136.2x
「自分のマシン」を表す特別なホスト名とIPアドレスとして、次の指定を使うことができますので、覚えておくとよいでしょう。
localhost 127.0.0.1
ほかのマシンのIPアドレスを知る
Sample1では実行中のマシンのIPアドレスを調べました。他のマシンのIPアドレスを知ることもできます。次のコードを入力してみて下さい。
using System;
using System.Windows.Forms;
using System.Net;
namespace lesoon10
{
class sample2:Form
{
private TextBox tb;
private Label[] lb = new Label[5];
private Button bt;
private TableLayoutPanel tlp;
static void Main(string[] args)
{
Application.Run(new sample2());
}
public sample2()
{
this.Text = "lesson10"; this.Width = 300; this.Height = 100;
tb = new TextBox();
tb.Dock = DockStyle.Fill;
bt = new Button();
bt.Width = this.Width;
bt.Text = "検索";
bt.Dock = DockStyle.Bottom;
tlp = new TableLayoutPanel();
tlp.Dock = DockStyle.Fill;
for (int i = 0; i < lb.Length; i++)
{
lb[i] = new Label();
lb[i].Dock = DockStyle.Fill;
}
tlp.ColumnCount = 2;
tlp.RowCount = 3;
lb[0].Text = "入力してください。";
lb[1].Text = "ホスト名:";
lb[3].Text = "IPアドレス:";
lb[0].Parent = tlp;
tb.Parent = tlp;
for (int i = 0; i < lb.Length; i++)
{
lb[i].Parent = tlp;
}
bt.Parent = this;
tlp.Parent = this;
bt.Click += new EventHandler(bt_Click);
}
public void bt_Click(Object sender, EventArgs e)
{
try
{
IPHostEntry ih = Dns.GetHostEntry(tb.Text);//ユーザーが指定したホスト名を取得します
IPAddress ia = ih.AddressList[0];
lb[2].Text = ih.HostName;
lb[4].Text = ia.ToString();
}
catch
{
MessageBox.Show("エラーが発生しました。");
}
}
}
}

このプログラムでは、ユーザが指定したホスト名からインターネットアドレスを得ると言う処理を行っています。そのあとで、Sample1と同じようにホスト名とIPアドレスを調べているのです。指定を行わないとSample1と同じく実行中のマシン情報が表示されます。
なお、このプログラムでは、ホスト名が誤っていた場合などに、エラーを表示します。エラーを表示するために、メッセージボックスを使います。
例外処理の仕組みを知る
ところで、ネットワークにアクセスするプログラムや、ファイルを読み込むプログラムを作成するときには、受講時になって初めて、ネットワークにアクセスできないことやファイルが存在しないことがわかる場合があります。
このように、
実行時に発生するエラーに対して、プログラム作成時にエラー処理を記述しておきたい
と言う場合があります。このために使われるのが、例外処理(exception)と呼ばれる仕組みです。例外処理は次のように記述します。
try
{
例外を検出する処理
}
catch(例外の型である引数のリスト)
{
例外が発生したときに行う処理
}
例外処理では、例外が発生する可能性がある箇所をtry{}でかこみます。これに対する処理をcatch{}内で行います。例外には型があり、引数で指定した型だけを処理することもできます。
Sample2では、GetHostEntry()メソードを呼び出した場合に例外が発生する可能性があります。そこでこの文をtryでかこみ、catchの後の型を省略して、ごくかんたんな例外処理を行うようにしています。
例外処理によって、プログラム実行時のエラーを処理できる。

コメント