Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端上的C#客户端服务器实现错误';s插座“;无法建立连接……”;_C#_Sockets - Fatal编程技术网

客户端上的C#客户端服务器实现错误';s插座“;无法建立连接……”;

客户端上的C#客户端服务器实现错误';s插座“;无法建立连接……”;,c#,sockets,C#,Sockets,我正在尝试启动我的客户端,但出现错误。服务器已在同一台计算机上运行。所以我在GetHostEntry中使用“localhost”: IPHostEntry ipHostInfo = System.Net.Dns.GetHostEntry("localhost"); IPAddress ipAddress = ipHostInfo.AddressList[0]; IPEndPoint remoteEP = new IPEndPoint(ipAddress, Port); Sock = ne

我正在尝试启动我的客户端,但出现错误。服务器已在同一台计算机上运行。所以我在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);
但我有这样一个“无法建立连接,因为目标机器主动拒绝它”:

第156行是

client.EndConnect(ar);
原因是什么?可能是因为ipHostInfo.AddressList[0]是IPv6吗?那么我如何接受Ipv4地址?

您可以使用IPAddress类的属性来判断地址是Ipv4还是IPv6

通过这种方式,您可以循环查看返回的IP地址列表,并选择第一个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);    

我对IPV4的localhost使用的内容:

IPHostEntry ipHostInfo = Dns.GetHostEntry("localhost");
IPAddress ipAddress = ipHostInfo.AddressList[1];

可能是你的防火墙阻止了它吗?我想没有。服务器工作正常。VS有使用网络的权限顺便说一句,我可以通过telnet连接到我的server@KSice-请查看对我的答案的编辑below@Ksice我只想确保服务器正在运行,并且正在接受连接,并且在正确的端口上。您能否显示任何服务器代码以确保安全。通常,当我没有运行服务器或IP地址/端口错误时,会出现该错误代码。@Ksice-你做得不对,请查看对我的回答的编辑哦,这就是你的意思。谢谢这有帮助@Ksice-我很高兴这对你有帮助。。如果这回答了您的问题,请投票/标记为答案!那个密码可以帮你还击。无法保证IPv4地址将列在第二位。。更糟糕的是,无法保证IPv4地址会存在!
IPHostEntry ipHostInfo = Dns.GetHostEntry("localhost");
IPAddress ipAddress = ipHostInfo.AddressList[1];