広告

.NETでUDPプロトコルを使ってメッセージを送信する方法

メッセージを送信するプロトコルとして主に使われるのは、TCP/IPとUDPが多いですが、今回はUDPによるメッセージ送信の方法を紹介します。

UDPは、TCP/IP通信の信頼性は低いが、送信速度が速いという特徴があるので、多くのメッセンジャーソフトで利用されています。

動作サンプル画像

初期起動時です。デフォルトでは、自分のパソコンに送信するようになっています。

UPD

送信するメッセージを入力して送信した後です。きちんと送信されていることが分かります。

UPD

サンプルソース

ソースのライセンスはGPLとします。

Imports System.Net
Imports System.Net.Sockets

''' <summary>
''' UDPプロトコルを使ってメッセージのやりとりをするサンプルプログラムです。
''' </summary>
''' <remarks>
''' ライセンス:GNU General Public License (http://www.gnu.org/licenses/gpl.html)
''' 著作者:rider (http://www.rider-n.sakura.ne.jp/wp/)
''' </remarks>
Public Class Form1
    Dim Udp As UdpClient
    Dim Ep As IPEndPoint

    ''' <summary>
    ''' フォームロード時の処理です。UDPクライアントの定義と非同期の受信処理を実行します。
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'スレッドセーフでなくてもエラーを出さない
        Control.CheckForIllegalCrossThreadCalls = False

        'UPDクライアントを定義
        Ep = New IPEndPoint(IPAddress.Any, Me.TextBox2.Text)
        Udp = New System.Net.Sockets.UdpClient(Ep)

        '非同期の受信処理
        Udp.BeginReceive(New AsyncCallback(AddressOf ReceiveCallback), Nothing)
    End Sub

    ''' <summary>
    ''' 送信ボタンクリック時の処理です。
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '入力された文字をバイト配列に読み込む
        Dim SendBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(Me.TextBox3.Text)

        '入力されたホストにメッセージを送信
        Udp.Send(SendBytes, SendBytes.Length, Me.TextBox1.Text, Me.TextBox2.Text)

        '非同期処理
        Udp.BeginReceive(New AsyncCallback(AddressOf ReceiveCallback), Nothing)
    End Sub

    ''' <summary>
    ''' 非同期のUDP受信処理です。UDPプロトコルからのメッセージを受信すると呼び出されます。
    ''' </summary>
    ''' <param name="ar"></param>
    ''' <remarks></remarks>
    Private Sub ReceiveCallback(ByVal ar As IAsyncResult)
        '受信したメッセージをバイト配列に読み込む
        Dim RcvBytes As Byte() = Udp.EndReceive(ar, Ep)
        'バイトデータを文字列に変換
        Dim RcvMsg As String = System.Text.Encoding.UTF8.GetString(RcvBytes)

        '受信したデータをテキストに表示
        Me.TextBox4.Text = Me.TextBox4.Text & "送信メッセージ:" & RcvMsg & vbCrLf
        Me.TextBox4.Text = Me.TextBox4.Text & "送信元アドレス:" & Ep.Address.ToString & vbCrLf
        Me.TextBox4.Text = Me.TextBox4.Text & "ポート番号  :" & Ep.Port & vbCrLf & vbCrLf
    End Sub
End Class

プログラム中では、「Control.CheckForIllegalCrossThreadCalls = False」でスレッドセーフでない場合でもエラーを出さないようにしていますが、本来は、きちんとスレッドセーフになるようにプログラムを書いてください。

スレッドセーフにする方法は以下の記事を参考にしてください。
.NETのスレッド処理でスレッドセーフでない場合でもエラーを出さないようにする方法

サンプルプログラムダウンロード

“UDPMessenger” をダウンロード UDPMessenger.zip – 1624回ダウンロードされました – 30 kB

Share on Facebook

  1. コメントはありません。

  1. トラックバックはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)
*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

広告

Facebook

カレンダー

2011年3月
« 2月   4月 »
 12345
6789101112
13141516171819
20212223242526
2728293031  

最近の投稿

アーカイブ