0

クライアントを起動しようとしていますが、エラーが発生します。サーバーは同じコンピューター上で既に実行されています。したがって、GetHostEntry で「localhost」を使用しています。

 IPHostEntry ipHostInfo = System.Net.Dns.GetHostEntry("localhost");
 IPAddress ipAddress = ipHostInfo.AddressList[0];
 IPEndPoint remoteEP = new IPEndPoint(ipAddress, Port);

Sock = new Socket(remoteEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
Sock.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), Sock);

しかし、「ターゲットマシンが積極的に拒否したため、接続できませんでした」ということがあります。

System.Net.Sockets.SocketException (0x80004005): No connection could be made because the target machine actively refused it [::1]:7777
   at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
   at NotifierClient.AsynchronousClient.ConnectCallback(IAsyncResult ar) in *** :line 156 

156行目は

client.EndConnect(ar);

理由は何ですか?ipHostInfo.AddressList[0] が IPv6 であるためでしょうか? どうすればIPv4アドレスを受け入れることができますか?

4

2 に答える 2

2

IPAddress クラスのAddressFamilyプロパティを使用して、アドレスが IPv4 か IPv6 かを判断できます。

このようにして、返された IPAddress-es のリストをループし、IPv4 アドレスである最初のものを選択できます。

IPHostEntry ipHostInfo = System.Net.Dns.GetHostEntry("localhost");    

IPAddress ipAddress = null;
foreach(var addr in ipHostInfo.AddressList)
{
    if(addr.AddressFamily == AddressFamily.InterNetwork)        // this is IPv4
    {
         ipAddress = addr;
         break;
    }
}

// at this point, ipAddress is either going to be set to the first IPv4 address
//  or it is going to be null if no IPv4 address was found in the list
if(ipAddress == null)
    throw new Exception("Error finding an IPv4 address for localhost");

IPEndPoint remoteEP = new IPEndPoint(ipAddress, Port);

Sock = new Socket(remoteEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
Sock.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), Sock);    
于 2012-06-15T15:16:48.453 に答える
-1

IPV4 の localhost に使用するもの:

IPHostEntry ipHostInfo = Dns.GetHostEntry("localhost");
IPAddress ipAddress = ipHostInfo.AddressList[1];
于 2012-06-15T15:23:50.607 に答える