UDP通信 (1)
Metro Style App でLAN上のサーバーと通信する方法について調べてみました。
今回調べたのは UDP での通信についてです。
まずは、確認用にデスクトップアプリで UDP 通信を行うクライアント/サーバーを作成します。
最初に作成するのはサーバーです。
UDP で文字列を受信し、頭に"Echo : "を付けた形で返信する機能を実装します。
public partial class Form1 : Form { UdpClient client; public Form1() { InitializeComponent(); } private async void Form1_Load(object sender, EventArgs e) { client = new UdpClient(11111); client.EnableBroadcast = true; try { for (; ; ) { var result = await client.ReceiveAsync(); var str = Encoding.UTF8.GetString(result.Buffer); Debug.WriteLine("EndPoint = {0} / Receive = {1}", result.RemoteEndPoint.Address.ToString(), str); var data = Encoding.UTF8.GetBytes("Echo : " + str); await client.SendAsync(data, data.Length, result.RemoteEndPoint); } } catch (Exception ex) { Debug.WriteLine(ex.Message); } } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { client.Close(); } }
このアプリは外部からの受信を待機する形になりますので、ファイアーウォールで通信を許可する必要があります。
通常は最初に起動した時に通信を許可するか聞かれますので、その時に許可します。
サーバーがちきんと動作しているか確認するために、クライアント側も作成します。
クライアントは TextBox に文字列を入力して Send ボタンを押すと、文字列をサーバーに送信し、サーバーから戻ってきた文字列を画面に表示します。
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private async void sendButton_Click(object sender, EventArgs e) { var client = new UdpClient(); client.EnableBroadcast = true; var data = Encoding.UTF8.GetBytes(sendTextBox.Text); var endpoint = new IPEndPoint(IPAddress.Broadcast, 11111); int rtn = await client.SendAsync(data, data.Length, endpoint); var result = await client.ReceiveAsync(); var str = Encoding.UTF8.GetString(result.Buffer); recvTextBox.Text = str; client.Close(); } }
クライアント、サーバー両方を起動し、クライアントから送信してみた結果が以下の画面です。
送受信が動作している事がわかりました。
次回は、クライアントの Metro Style App 版を作成します。