TCP/IP送受信スレッド

Namespace: FVIL.Net
Assembly: FVILforms (in FVILforms.dll) Version: 3.1.0.0 (3.1.0.9)

Syntax

C#
public class TcpClientThread : IDisposable
Visual Basic
Public Class TcpClientThread
	Implements IDisposable

Remarks

サーバーまたはクライアントの送受信スレッドです。
接続先にデータを送信するには以下のいずれかのメソッドを使用してください。
  1. Send
  2. SendAsXml
  3. SendAsBinary (推奨)

接続先からデータを受信するにはスレッドを使用してください。 受信スレッドがデータを受信したことを検知するには Wait で待機するか、Notify イベントを使用してください。 データを受信するとスレッドがイベントを通知しますので、 受け取ったイベントの引数(TcpClientEventArgs)の Data プロパティからデータを復元してください。 復元方法は、送信元が使用したメソッドによって異なります。
  1. Send ... Marshal.PtrToStructure 等で復元してください。
  2. SendAsXml ... ReadAsXml で復元してください。
  3. SendAsBinary ... ReadAsBinary で復元してください。

接続先が切断すると受信スレッドが TcpClientEventArgs の Exception に 例外の内容を設定してイベントを通知します。

Examples

TCP/IP クライアントからサーバーへ送信する例を示します。
この例では SendAsBinary(Object) を使用して送信しています。 このメソッドを使用するには送信対象のクラスが Serializable 属性を持たなければなりません。

C# Copy imageCopy
/// <summary>
/// TCP/IP 通信テスト
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuOpen_Click(object sender, EventArgs e)
{
    FVIL.Net.IPInfo info = new FVIL.Net.IPInfo("127.0.0.1", 50000, "friend");
    TcpServer = new FVIL.Net.TcpServerThread(info);
    TcpServer.Notify += new FVIL.Net.TcpClientEventHandler(TcpServer_Notify);
    TcpServer.Start();

    TcpClient = new FVIL.Net.TcpClientThread(info);
    TcpClient.Start();
}

/// <summary>
/// TCP/IP サーバー
/// </summary>
FVIL.Net.TcpServerThread TcpServer = null;

/// <summary>
/// TCP/IP クライアント
/// </summary>
FVIL.Net.TcpClientThread TcpClient = null;

/// <summary>
/// TCP/IP 通信:解放
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuClose_Click(object sender, EventArgs e)
{
    TcpClient.Dispose();
    TcpServer.Dispose();
}

/// <summary>
/// TCP/IP 通信:送信
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuSend_Click(object sender, EventArgs e)
{
    FVIL.Data.CFviPoint data = new FVIL.Data.CFviPoint(111.1, 222.2);
    TcpClient.SendAsBinary(data);
}

/// <summary>
/// TCP/IP 通信:受信イベントハンドラ
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void TcpServer_Notify(object sender, FVIL.Net.TcpClientEventArgs e)
{
    Console.WriteLine("TimeStamp = {0}", e.TimeStamp);
    Console.WriteLine("Exception = {0}", e.Exception);

    if (e.Data != null)
    {
        FVIL.Net.TcpClientThread client = (FVIL.Net.TcpClientThread)sender;
        object data = client.ReadAsBinary(e.Data);

        Console.WriteLine("data = {0}", data.GetType().FullName);

        if (data is FVIL.Data.CFviPoint)
        {
            FVIL.Data.CFviPoint point = (FVIL.Data.CFviPoint)data;
            Console.WriteLine("point.X = {0}", point.X);
            Console.WriteLine("point.Y = {0}", point.Y);
        }
    }
}

出力結果:
	TimeStamp = 2012/05/31 19:40:59
	Exception = 
	data = FVIL.Data.CFviPoint
	point.X = 111.1
	point.Y = 222.2
	

[↑戻る]

Inheritance Hierarchy

System..::..Object
FVIL.Net..::..TcpClientThread

See Also