C#でソケット通信を行う。

C#

新規プロジェクトの作成

Project名:CS_Socket
開発言語:C#
使用ライブラリ:SocketIoClientDotNet

ライブラリ追加方法

メニューから ツール > NuGet パッケージマネージャー > ソリューションの NuGet パッケージの管理 > 参照 で SocketIoClientDotNet を検索してインストールします。

仕様

デバッグ機能:全チャットメッセージ削除機能。
デバッグ機能:全チャットメッセージ再読み込み機能。
チャット機能:1時間毎に気象庁ホームページ浜松気温データを読み出し、自動配信する。
チャット機能:テキストボックスに入力された文字列を配信する。
チャット機能:ホームページから入力された文字列を表示する。
チャット機能:定型文ボタンが押された時に、定型文を配信する。

画面仕様

管理者配信文字列とユーザー配信文字列を区別するために、色分け及び表示位置(左右)を行う。

プログラム説明

サーバーへの接続

this.socket = IO.Socket("https://########:$$$$/");
########サーバーアドレス
$$$$ポート番号

サーバー接続確認

this.socket.On(Socket.EVENT_CONNECT, () =>
{
//ここに接続処理
}

サーバーへメッセージ(JSON)送信

 var message = new NewMessage()
{
  FromAddress = ID_ADMIN,
  ToAddress   = ID_SERVER,  
  TimeStamp   = DateTime.Now.ToString(),
  Event       = "GET",
  Message     = "サーバーへの接続が出来ました。",
};
this.socket.On(Socket.EVENT_CONNECT, () =>
{
  var src = new List<NewMessage> { message };
  string jsonString = JsonConvert.SerializeObject(src);
  this.socket.Emit("chat-message", jsonString);
  this.Invoke((MethodInvoker)(() => {
    labelConect.Text = "Conected";
  }));
});
1行目 送信メッセージの定義。
11行目List要素の作成。
12行目JSONデータへ変換。
13行目メッセージの送信
14行目画面に接続情報表示。

jsonStringの値

"[{\"fromAddress\":\"2\",\"toAddress\":\"1\",\"event\":\"GET\",\"message\":\"サーバーへの接続が出来ました。\",\"timeStamp\":\"2020/09/08 6:40:11\"}]"

メッセージの受信

this.socket.On("chat-message", (jo) =>
{
  if (jo != null)
  {
    var list = JsonConvert.DeserializeObject<List<NewMessage>>(jo.ToString());
    foreach (var booksByJson in list)
    {
      this.RecvNewMessage(booksByJson);
    }
  }
});
1行目 サーバーからのメッセージ待ち。
5行目デシリアライズ - 型引数に復元するオブジェクトの型を指定し、JSON文字列を渡す。
6行目受信データを取り出す。
7行目受信データを表示する。

joの値

"[{\"fromAddress\":\"2\",\"toAddress\":\"1\",\"event\":\"POST\",\"message\":\"定型文:いつもご利用ありがとうございます。\",\"timeStamp\":\"2020/09/08 6:47:48\"}]"

参考サイト

ソケット通信

JSON処理

その他

コメント