C#でソケットのサーバー側から接続元のIPアドレスを取得する方法

2024年8月13日火曜日

C#

t f B! P L

はじめに

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アドレスを取得する方法について説明しました。サンプルコードを使えば、簡単にネットワーク通信におけるクライアントの識別やログ記録が可能になります。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ