UDP送受信スレッド
Namespace: FVIL.NetAssembly: FVILforms (in FVILforms.dll) Version: 3.1.0.0 (3.1.0.9)
Syntax
C# |
---|
public class UdpClientThread : IDisposable |
Visual Basic |
---|
Public Class UdpClientThread Implements IDisposable |
Remarks
接続先にデータを送信するには以下のいずれかのメソッドを使用してください。
接続先からデータを受信するにはスレッドを使用してください。 受信スレッドがデータを受信したことを検知するには Wait で待機するか、Notify イベントを使用してください。 データを受信するとスレッドがイベントを通知しますので、 受け取ったイベントの引数(TcpClientEventArgs)の Data プロパティからデータを復元してください。 復元方法は、送信元が使用したメソッドによって異なります。
- Send
- SendAsXml
- SendAsBinary (推奨)
接続先からデータを受信するにはスレッドを使用してください。 受信スレッドがデータを受信したことを検知するには Wait で待機するか、Notify イベントを使用してください。 データを受信するとスレッドがイベントを通知しますので、 受け取ったイベントの引数(TcpClientEventArgs)の Data プロパティからデータを復元してください。 復元方法は、送信元が使用したメソッドによって異なります。
- Send ... Marshal.PtrToStructure 等で復元してください。
- SendAsXml ... ReadAsXml で復元してください。
- SendAsBinary ... ReadAsBinary で復元してください。
SendAsXml や SendAsBinary は大量のデータの伝送には対応していません。 1つのパケットが 32kbytes を超える場合は Send メソッドを使用して 自身で送受信のハンドシェイクを行ってください。
Examples
送信側の例を示します。
192.168.1.200, 50000 は送信先の IP アドレスとポート番号を示します。
この例では受信処理を行っていませんが、自身の受信ポートは送信先と同一番号(50000)をオープンしています。
C# | Copy |
---|---|
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace TestUDP { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (UdpClientThread != null) UdpClientThread.Dispose(); } /// <summary> /// UDP通信スレッド /// </summary> FVIL.Net.UdpClientThread UdpClientThread = null; /// <summary> /// オープン /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Open_Click(object sender, EventArgs e) { FVIL.Net.IPInfo info = new FVIL.Net.IPInfo("192.168.1.200", 50000, "client200"); UdpClientThread = new FVIL.Net.UdpClientThread(info); UdpClientThread.Start(); } /// <summary> /// 送信1 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Send_Click(object sender, EventArgs e) { UdpClientThread.SendAsBinary(new FVIL.Data.CFviPoint(111.1, 222.2)); } /// <summary> /// 送信2 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Send_Click(object sender, EventArgs e) { UdpClientThread.SendAsBinary("Hello, world!"); } } } |
受信側の例を示します。
この場合は送信先がないので自身の IP アドレスを指定してかまいません。
但し、ポート番号は適切なものを指定してください。
前述の送信側のデータを受信する場合は、ポート番号 50000 をオープンしなければなりません。
C# | Copy |
---|---|
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace TestUDP { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_FormClosing(object sender, FormClosingEventArgs e) { if (UdpClientThread != null) UdpClientThread.Dispose(); } /// <summary> /// UDP通信スレッド /// </summary> FVIL.Net.UdpClientThread UdpClientThread = null; /// <summary> /// オープン /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Open_Click(object sender, EventArgs e) { FVIL.Net.IPInfo info = new FVIL.Net.IPInfo("192.168.1.200", 50000, "client200"); UdpClientThread = new FVIL.Net.UdpClientThread(info); UdpClientThread.Notify += new FVIL.Net.UdpClientEventHandler(UdpClientThread_Notify); UdpClientThread.Start(); } /// <summary> /// 受信イベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void UdpClientThread_Notify(object sender, FVIL.Net.UdpClientEventArgs e) { Console.WriteLine("TimeStamp = {0}", e.TimeStamp); Console.WriteLine("Exception = {0}", e.Exception); Console.WriteLine("RemoteEP = {0},{1}", e.RemoteEP.Address, e.RemoteEP.Port); if (e.Data != null) { object _data = UdpClientThread.ReadAsBinary(e.Data); if (_data is FVIL.Data.CFviPoint) { FVIL.Data.CFviPoint data = (FVIL.Data.CFviPoint)_data; Console.WriteLine("data = {0},{1}", data.X, data.Y); } else if (_data is string) { string data = (string)_data; Console.WriteLine("data = {0}", data); } } } } } |
出力結果:
TimeStamp = 2012/05/31 19:40:59 Exception = RemoteEP = 172.17.13.107,50000 data = 111.1, 222.2 TimeStamp = 2012/05/31 19:40:59 Exception = RemoteEP = 172.17.13.107,50000 data = Hello, world!
Inheritance Hierarchy
System..::..Object
FVIL.Net..::..UdpClientThread
FVIL.Net..::..UdpClientThread