はじめに
C#でネットワークプログラミングを行う際、サーバー側で接続してきたクライアントのIPアドレスを取得すし、クライアントの識別やログ記録などで使用することがあります。
C#では、クライアント接続時に取得できるTcpClient
クラスを使用して、このような接続元の情報を簡単に取得することができます。
この記事では、C#を使ってソケットサーバーを実装し、接続元のIPアドレスを取得する方法をサンプルコードとともに解説します。
接続元のIPを取得するサンプル
以下のコードは、C#でシンプルなTCPサーバーを作成し、クライアントからの接続を待ち受け、接続元のIPアドレスとポート番号を取得する例です。
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
IPAddress ipAddress = IPAddress.Any; // サーバーのIPアドレス
int port = 5000; // サーバーのポート番号
// TcpListenerを初期化して待機
var listener = new TcpListener(ipAddress, port);
listener.Start();
Console.WriteLine("サーバーが起動しました。クライアントからの接続を待っています...");
// クライアントからの接続を受け入れ
TcpClient client = await listener.AcceptTcpClientAsync();
// TcpClientから接続元の情報を取得
IPEndPoint? endPoint = client.Client.RemoteEndPoint as IPEndPoint;
Console.WriteLine($"接続元のIPアドレス > {endPoint?.Address}");
Console.WriteLine($"接続元のポート > {endPoint?.Port}");
// 必要な処理をここで実行...
// 接続を閉じる
client.Close();
listener.Stop();
}
}
コード解説
まずサーバー側は、listener.AcceptTcpClientAsync()
を使用して、クライアントからの接続を非同期に待機します。接続が確立されると、TcpClient
オブジェクトが返されます。
TcpClient.Client.RemoteEndPoint
プロパティを使って、接続元のエンドポイント情報を取得します。このプロパティはEndPoint
型ですが、IPアドレスとポート番号を取得するためにIPEndPoint
にキャストします。
そして、endPoint?.Address
で接続元のIPアドレス、endPoint?.Port
で接続元のポート番号を取得します。
まとめ
C#を使用してTCPサーバーを実装し、接続元のIPアドレスを取得する方法について説明しました。サンプルコードを使えば、簡単にネットワーク通信におけるクライアントの識別やログ記録が可能になります。
0 件のコメント:
コメントを投稿