一、Socketプログラミングとは何か
- Socketの文字通りの意味
Socketは元々コンセントを意味する英単語です。コンセントは二点の間に接続を作り出すため、ネットワークプログラミングではネットワーク通信用の端点という意味で使われます。 - Socketプログラミングの定義
TCP / UDPといったネットワークプロトコルを利用し、複数のホスト間でデータの送受信を行う処理です。 - 平易な解説
2台以上のコンピュータ同士がデータをやり取りできるプログラムを書くことです。代表的な例として、LAN上で動作するチャットツールが挙げられます。
イメージ例:コンセント=ネットワークエンドポイント、プラグ=相手ホスト、プラグを差し込む=ネットワーク接続の確立。
理解を深めるため、実際にコードを書きながら学べるサンプルを用意します。
二、簡易チャットツールの設計案
アーキテクチャモデル:クライアント/サーバー(C/S)
- サーバー(Server)
- ローカルの指定ポートにバインドし、ネットワークからの接続要求を待ち受け続ける
- 他のコンピュータからの接続を待機する
- クライアントからの接続を検知したら通信経路を作成する
- クライアント(Client)
サーバーのIPアドレスとポート番号を指定し、自ら接続要求を送信する - 通信の目的:2台のコンピュータでテキストメッセージをリアルタイムに送受信し、チャットを実現する
処理フロー
- サーバー起動 → ポート待ち受けを開始
- クライアント起動 → サーバーのIPとポートへ接続
- 接続が確立したら、互いにメッセージを送受信
以下に最小限のサンプルコードを示します
サーバー
// 1. TcpListenerを作成しIPとポートを監視
TcpListener listener = new TcpListener(IPAddress.Any, 8899);
listener.Start();
// 2. クライアントからの接続を待つ
TcpClient client = await listener.AcceptTcpClientAsync();
// 3. ネットワークストリームを取得しメッセージを送受信
NetworkStream stream = client.GetStream();
Code language: JavaScript (javascript)
クライアント
// サーバーのIPとポートに接続
TcpClient client = new TcpClient();
await client.ConnectAsync("192.168.1.100",8899);
NetworkStream stream = client.GetStream();Code language: JavaScript (javascript)
概要
Next: サーバー側ポート監視