【发布时间】:2019-02-21 01:09:33
【问题描述】:
下面是我的代码,用于启动客户端到服务器的 tcp 连接:
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client);
连接回调:
private void ConnectCallback(IAsyncResult ar)
{
try
{
// Retrieve the socket from the state object.
Socket client = (Socket)ar.AsyncState;
// Complete the connection.
client.EndConnect(ar);
}
catch (Exception ex)
{
_logger.Info(ex.ToString());
}
}
但我的代码只在我的系统启动时连接一次。如果第一次尝试失败,我们如何重试连接?
如果连接总是失败,总是会重试?
也许每 30 秒重试一次?
【问题讨论】:
-
在失败的情况下从 ConnectCallback 启动另一个异步调用。如果要设置最大值,请传递失败的尝试次数。
-
是否可以切换到 TPL(异步/等待任务)?
-
Fildor,我们如何检查连接是否失败?
-
"SocketException 尝试访问套接字时发生错误。" - MS Docs
-
无论如何我都不会赶上
Exception。你想抓住SocketException,因为那是你可以并且想要处理的。让其他人冒泡到您的全局异常处理程序。