NonSoft

ソケット(UDP/IP)での送受信(非同期イベント)
サンプル(C#/VB.NET)


 サンプル(ソース/コード)
<このサンプルの概要>
ソケット(UDP/IP)を使用して電文の送受信(非同期イベント)をするC#/VB.NETのサンプルソースです。
TCP/IPにはサーバー側とクライアント側という区別がありましたが、
UDP/IPには区別はありません。

ソケット(UDP/IP)の接続手順は以下の通りです。
1.ソケット生成
2.ソケット接続

ソケット(UDP/IP)の送信手順は以下の通りです。
1.送信電文作成
2.ソケット送信

ソケット(UDP/IP)の受信手順は以下の通りです。
1.ソケット受信
2.受信電文表示

このサンプルは受信イベントで受信電文チェックを行なっています。
タイマーで受信電文チェックをするサンプルはこちらです。
ソケット(UDP/IP)での送受信サンプル(C#/VB.NET)

ソケット関係のその他のサンプルソースやツールはこちらです。
このサンプルの通信テストでもこちらのツールを使用しました。
通信サンプルやツール(RS232C TCP/IP UDP/IP)

Public Class Form1
    ' ソケット生成
    Private objSck As New System.Net.Sockets.UdpClient(7777)
    Private Sub Form1_Load( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles MyBase.Load
        ' ソケット接続
        objSck.Connect("127.0.0.1", 8888)

        ' ソケット非同期受信(System.AsyncCallback)
        objSck.BeginReceive(AddressOf ReceiveCallback, objSck)
    End Sub

    Private Sub Form1_FormClosed( _
        ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) _
        Handles MyBase.FormClosed
        ' ソケットクローズ
        objSck.Close()
    End Sub

    Private Sub Button1_Click( _
        ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles Button1.Click
        ' ソケット送信
        Dim dat As Byte() = _
            System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("abcあいう")
        objSck.Send(dat, dat.GetLength(0))
    End Sub

    Private Sub ReceiveCallback(ByVal AR As IAsyncResult)
        ' ソケット受信
        Dim ipAny As System.Net.IPEndPoint = New System.Net.IPEndPoint(System.Net.IPAddress.Any, 0)
        Dim dat As Byte() = objSck.EndReceive(AR, ipAny)
        MessageBox.Show(System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(dat))

        ' ソケット非同期受信(System.AsyncCallback)
        objSck.BeginReceive(AddressOf ReceiveCallback, objSck)
    End Sub
End Class

 public partial class Form1 : Form
 {
     // ソケット生成
     private System.Net.Sockets.UdpClient objSck = new System.Net.Sockets.UdpClient(7777);
     public Form1()
     {
         InitializeComponent();
     }

     private void Form1_Load(object sender, EventArgs e)
     {
         // ソケット接続
         objSck.Connect("127.0.0.1", 8888);

         // ソケット非同期受信(System.AsyncCallback)
         objSck.BeginReceive(ReceiveCallback, objSck);
     }

     private void Form1_FormClosed(object sender, FormClosedEventArgs e)
     {
         // ソケットクローズ
         objSck.Close();
     }

     private void button1_Click(object sender, EventArgs e)
     {
         // ソケット送信
         Byte[] dat =
             System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("abcあいう");
         objSck.Send(dat, dat.GetLength(0));
     }

     private void ReceiveCallback(IAsyncResult AR)
     {
         // ソケット受信
         System.Net.IPEndPoint ipAny = new System.Net.IPEndPoint(System.Net.IPAddress.Any, 0);
         Byte[] dat = objSck.EndReceive(AR, ref ipAny);
         MessageBox.Show(System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(dat));

         // ソケット非同期受信(System.AsyncCallback)
         objSck.BeginReceive(ReceiveCallback, objSck);
     }
}