Я хотел бы поделиться этим ответом, который нашел, потому что причиной проблемы был не брандмауэр или процесс, который не слушал правильно, а образец кода, предоставленный Microsoft, который я использовал.
https://msdn.microsoft.com/en-us/library/system.net.sockets.socket%28v=vs.110%29.aspx
Я реализовал эту функцию почти так, как написано, но случилось то, что я получил эту ошибку:
2016-01-05 12: 00: 48,075 [10] ОШИБКА - ошибка: System.Net.Sockets.SocketException (0x80004005): не удалось установить соединение, поскольку целевая машина активно отказала ему [fe80 :: caa : 745: a1da: e6f1% 11]: 4080
Этот код сказал бы, что сокет подключен, но не под правильным IP-адресом, фактически необходимым для правильной связи. (Предоставлено Microsoft)
private static Socket ConnectSocket(string server, int port)
{
Socket s = null;
IPHostEntry hostEntry = null;
// Get host related information.
hostEntry = Dns.GetHostEntry(server);
// Loop through the AddressList to obtain the supported AddressFamily. This is to avoid
// an exception that occurs when the host IP Address is not compatible with the address family
// (typical in the IPv6 case).
foreach(IPAddress address in hostEntry.AddressList)
{
IPEndPoint ipe = new IPEndPoint(address, port);
Socket tempSocket =
new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
tempSocket.Connect(ipe);
if(tempSocket.Connected)
{
s = tempSocket;
break;
}
else
{
continue;
}
}
return s;
}
Я переписал код, чтобы использовать только первый действительный IP-адрес, который он нашел. Я касаюсь только IPV4, использующего это, но он работает с localhost, 127.0.0.1, и фактически с IP-адресом вашей сетевой карты, где пример, предоставленный Microsoft, не удался!
private Socket ConnectSocket(string server, int port)
{
Socket s = null;
try
{
// Get host related information.
IPAddress[] ips;
ips = Dns.GetHostAddresses(server);
Socket tempSocket = null;
IPEndPoint ipe = null;
ipe = new IPEndPoint((IPAddress)ips.GetValue(0), port);
tempSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
Platform.Log(LogLevel.Info, "Attempting socket connection to " + ips.GetValue(0).ToString() + " on port " + port.ToString());
tempSocket.Connect(ipe);
if (tempSocket.Connected)
{
s = tempSocket;
s.SendTimeout = Coordinate.HL7SendTimeout;
s.ReceiveTimeout = Coordinate.HL7ReceiveTimeout;
}
else
{
return null;
}
return s;
}
catch (Exception e)
{
Platform.Log(LogLevel.Error, "Error creating socket connection to " + server + " on port " + port.ToString());
Platform.Log(LogLevel.Error, "The error is: " + e.ToString());
if (g_NoOutputForThreading == false)
rtbResponse.AppendText("Error creating socket connection to " + server + " on port " + port.ToString());
return null;
}
}