我制作了一个服务结构应用程序,它使用actor服务通过Socket与客户端应用程序一起创建消息通道。
客户端应用程序运行异步服务器套接字,如本示例https://technet.microsoft.com/es-es/library/fx6588te(v=vs.85).aspx,我的actor使用客户端IP地址连接它,就像在这个方案中一样:
public static void StartClient(byte[] i_address, string i_message)
{
// Connect to a remote device.
try
{
ActorEventSource.Current.Message("Creating socket");
// Establish the remote endpoint for the socket.
IPEndPoint remoteEP = new IPEndPoint(new IPAddress(i_address), port);
ActorEventSource.Current.Message("IPAddress created");
// Create a TCP/IP socket.
Socket client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
ActorEventSource.Current.Message("Client created");
client.Connect(remoteEP);
ActorEventSource.Current.Message("Client connected");
byte[] byteData = Encoding.ASCII.GetBytes(i_message);
ActorEventSource.Current.Message("Sending: " + i_message);
client.Send(byteData);
ActorEventSource.Current.Message("SENT");
// Release the socket.
client.Shutdown(SocketShutdown.Both);
client.Close();
}
catch (Exception e)
{
ActorEventSource.Current.Message(e.ToString());
}
}
当它使用本地IP地址运行时,它可以正常工作,但是当它使用公共IP地址工作时,它可以正常工作一次。
client.Connect(remoteEP);
上的第二次连接尝试失败
System.Net.Sockets.SocketException(0x80004005):连接尝试 失败,因为关联方在a之后没有正确回应 一段时间,或建立的连接失败,因为连接 主机失败