0

Hej All、私はソケットでリッスンするアプリケーションを持っています。問題は、PCに2枚のネットワークカードがあり、会社のネットワークとplcネットワークに接続されていることです。もちろん、会社のネットワークのDHCPから取得したIPアドレスをリッスン/バインド/...する必要があります。

しかし、これを行うと:

System.Net.IPEndPoint(System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName).AddressList(0)

PLCネットワークのIPを取得します。現在、適切なIPアドレスを動的に見つける方法を探しています。ソケットをIPAdress(0:0:0:0)にバインドできるというヒントはすでに得ていますが、そうするのは少し危険だと思います。

この問題を解決するためのアイデアや0:0:0:0に関するコメントはありますか?

前もって感謝します。

ジョナサン

4

3 に答える 3

1

0.0.0.0にバインドする、またはデフォルトのままにする場合の唯一のリスクは、両方のネットワークを介した接続を受け入れることです。それがリスクであるかどうか、つまり、他のネットワークに接続したくないものがあるかどうかを知っているのはあなただけです。0.0.0.0(別名INADDR_ANY)へのバインドは、ネットワークプログラミングのデフォルトでほぼ普遍的な方法です。

于 2011-02-28T22:40:53.947 に答える
0

私はユーザーに接続したいネットワークインターフェースを決定させ、それをAppSettingに配置しました。次に、構成ファイルを読み取って接続するネットワークインターフェイスを決定し、このコードを使用するIPアドレスを確認して取得するモジュールを作成します。

vb.netで:

 Dim networkinterfaces() As NetworkInterface = NetworkInterface.GetAllNetworkInterfaces()
            Dim found As Boolean = False

            For Each ni As NetworkInterface In networkinterfaces
                If NetworkInterfaceName.Equals(ni.Name) Then
                    If ni.GetPhysicalAddress().ToString().Length > 0 Then
                        IPAddressFromNetworkCard = ni.GetIPProperties.UnicastAddresses(0).Address
                        found = True
                        Exit For
                    End If
                End If
            Next

C#で(もう少しトレースしますが、ほとんど同じです):

Console.WriteLine("Test get ip of interfacecard");
            Console.WriteLine("Give name of interfacecard:");
            string s = Console.ReadLine();


            List<NetworkInterface> nics = NetworkInterface.GetAllNetworkInterfaces().ToList<NetworkInterface>();
            Console.WriteLine(nics.Count + "  networkinterfaces found");

            bool found = false;
            foreach (NetworkInterface ni in nics)
            {
                Console.WriteLine("Available nic: " + ni.Name);
            }
            Console.WriteLine("");
            Console.WriteLine(String.Format("searching for: \"{0}\"", s));
            foreach (NetworkInterface ni in nics)
            {
                if (ni.Name.Equals(s))
                {
                    if (ni.GetPhysicalAddress().ToString().Length > 0)
                    {
                        Console.WriteLine("Network interface found, ipAddress: " + ni.GetIPProperties().UnicastAddresses[0].Address.ToString());
                        found = true;
                        break;
                    }
                }

            }
            if (!found)
                Console.WriteLine(String.Format("\"{0}\" not found", s));

            Console.ReadKey();
于 2011-03-16T08:27:06.227 に答える
0

すべてのアドレスをループして、0。*および168. *(またはdhcpが提供するものは何でも...)ではないアドレスを使用することはできません。

ほとんどの場合(!)はこれで十分です。

于 2011-02-28T14:40:42.117 に答える