0

我有一个异步套接字应用程序,我正在尝试设置它以更好地处理异常。当捕获到套接字异常时,我会关闭套接字并将它们带回“连接”屏幕,在该屏幕上它会尝试重新连接套接字。问题是 - 尝试重新连接时,我收到一个错误,表明当前套接字已被处理。

当我尝试重新连接时,有没有办法检查套接字是否已被处理,如果是,则重新实例化套接字?

 catch (Exception e)
 {
                ShutDownAfterException();

                Console.WriteLine(e.ToString());
                Console.WriteLine("From ReceiveCallback");
 }

private void ShutDownAfterException()
{
            Client.Shutdown(SocketShutdown.Both);
            Client.Close();
            Client = null;

            Stop();
            Application.Current.Dispatcher.BeginInvoke(
            DispatcherPriority.Background,
            new Action(() => Messenger.Default.Send<NavigateMessage>(new NavigateMessage(ConnectViewModel.ViewName, this))));
}
4

1 回答 1

2

Socket.Close方法实际上将断开连接处理套接字,这意味着当您下次访问套接字实例时将引发异常。

如果您打算断开套接字,请仅使用 Socket.Disconnect(reuseSocket: true)

于 2013-10-20T18:19:09.757 回答