SocketNet  1.0
A Socket Networking (C/S) Library
SocketNet 詳解

概要

SocketNet は、ソケットを使ってクライアントサーバプログラムを作成するための C# フレームワークです。 主に、サーバを作るための SocketNet.TcpServer クラスと、 クライアントで使用する SocketNet.TcpConnection クラスで構成されます。

ライセンス

このライブラリは、 GNU Lesser General Public License バージョン 3 の元で配布しています。

サンプルプログラム

SocketNet を使用したサンプルプログラムを以下のプロジェクトで提供しています。

SampleChatServer

SampleChatServer はターミナルから起動する CLI コマンドです。 起動するとチャットクライアントからの接続を、ポート番号 50001 で待ち受けます。 何かキーを入力すると終了します。

クライアントから接続があったり、メッセージを受信したりするとコンソールに表示します。

メッセージが「/LIST」のときは、現在接続しているクライアントの IP アドレスを表示します。

SampleChatGtkClient

SampleChatGtkClient は Gtk# ベースの GUI アプリケーションです。 起動したら SampleChatServer が実行されているパソコンの IP アドレスを入力して、 Connect ボタンで接続します。

メッセージ入力エリアに文字を入力して Send ボタンをクリックすると、 サーバにその文字が送信されます。 サーバから送り返されたメッセージは、メッセージ表示エリアに表示されます。

切断は Disconnect ボタンをクリックします。

使用法

パケットの構造が、先頭 4 バイトにネットワークバイトオーダでペイロード長が格納されている場合は、 単に SocketNet.TcpServer のインスタンスを生成して Start() メソッドを呼び出します。

var server = new TcpServer(IPAddress.Any, 50001, new Packet());
server.DataReceived = server_DataReceived;
server.Start();

上記のようにすることで、 server_DataReceived() がパケットを受信するごとに呼び出されます。 server_DataReceived() に受信したときの処理を書いてください。

パケットの構造が複雑な場合は、 SocketNet.Packet クラスを継承して、 SocketNet.Packet.ObtainPayloadLength() をオーバライドします。

例えば、ヘッダが 5 バイト、フッタが 2 バイトで、ペイロードの長さがヘッダの 3 バイト目に格納されている場合は、 以下のようになるでしょう。

public class MyPacket: SocketNet.Packet
{
public MyPacket() : base(5, 2) {}
public override int ObtainPayloadLength(byte[] header)
{
return header[2];
}
}