0

プログラミングは初めてですが、学校でまだ教えられていないいくつかの分野を独学で学ぼうとしています。

稼働中のプロジェクトの壮大な計画は、サーバーへのクライアント接続を受け入れることです。コンソール ウィンドウに接続時刻が表示されます。ロギングのためにクライアントのIPアドレスも表示しようとしています。以下は私が持っているものですが、正しく解析できません。

//Console Output
string IPAddress = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();
IPAddress address = IPAddress.Parse(ipAddress);
Console.WriteLine("New TCP connection made at " + "{0:g}", DateTime.Now + IPAddress);

「IPAddress address ......」行を省略すると、長く醜い、解析されていないアドレス =p が表示されます。

4

2 に答える 2

0

また、ログ記録のためにクライアントのIPアドレスを表示させようとしています。

クライアントには複数のNICが存在する可能性があることに注意してください。つまり、有線/無線(および有線NIC以上)です。これは、複数のIPアドレスが存在し、IPv4アドレスとIPv6アドレスが混在している可能性が高いことを意味します。

Dns.GetHostEntryメソッドを使用する場合、ホスト名として空の文字列を渡すと、ローカルホストのIPv4アドレスが返されます。

IPHostEntry entry = Dns.GetHostEntry( string.Empty );

または、次を使用することもできます。

IPHostEntry entry = Dns.GetHostEntry( Dns.GetHostName() );

次に、すべてのアドレスを検索するには、AddressFamily列挙を使用します。

var addresses = entry.AddressList.Where( x => x.AddressFamily == AddressFamily.InterNetwork );

ここで、AddressFamily.InterNetwork=IPバージョン4のアドレス。

ここから、addresses必要に応じて繰り返すことができます。

于 2013-02-06T04:17:16.773 に答える
0

アドレス リストからすべての IP アドレスを確認し、IPV6 のものを破棄する必要があります。

IPAddress[] ipv4Addresses = Array.FindAll(
    Dns.GetHostEntry(string.Empty).AddressList,
    a => a.AddressFamily == AddressFamily.InterNetwork);

AddressFamily タイプについては、このリンクを参照してください。

于 2013-02-06T04:03:17.550 に答える