代码没有到达try块的末尾,但也没有到达catch块?

时间:2018-04-18 14:52:00

标签: c# .net

我正在尝试连接到Socket并且我遇到了一个相当奇怪的错误。这个方法第一次被调用它会运行正常,如果服务器不合理地关闭或断开此客户端,那么下次这个代码运行时它不会告诉我它是成功还是失败?

我在调试模式下运行它并没有到达try块中的日志,它也没有到达throw或登录catch块,这里发生了什么?

我知道我的日志方法有效,因为它在第一次运行此代码时运行得非常好。

try
{
    _socket.Connect(new IPEndPoint(IPAddress.Parse(host), port));
    CoreUtilities.LogToConsole("Successfully established a connection to the server.");
}
catch (SocketException socketException)
{
    if (socketException.SocketErrorCode == SocketError.ConnectionRefused)
    {
        CoreUtilities.LogToConsole("Failed to establish a connection with the server.");
        _reconnect = true;
    }
    else
    {
        throw;
    }
}

我也有一个finally块,但我认为这与此错误无关。

finally
{
    if (_socket.Connected && CoreUtilities.IsConnected(_socket))
    {
        _socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, OnIncomingData, _socket);
        Send(new SocketPasswordComposer(_session.ConfigHandler["server.password"]));
    }

    if (!_hasConnected)
    {
        var timer = new Timer
        {
            Interval = 10000
        };

        timer.Elapsed += ElapsedTimer;
        timer.Enabled = true;
    }

    _hasConnected = true;
}

3 个答案:

答案 0 :(得分:1)

在代码没有错误之前,不要连接语句或尝试特定的错误处理。

int step = 0;
try
{
    step = 1;
    var parsed = IPAddress.Parse(host);
    step = 2;
    var endpoint = new IPEndPoint(parsed, port);
    step = 3;
    _socket.Connect(endpoint);
    step = 4;
    CoreUtilities.LogToConsole("Successfully established a connection to the server.");
}
catch (Exception error)
{
    MessageBox.Show(error.Message, "Step " + step.ToString());
}

如果您收到消息框显示"步骤4",问题在于您没有显示代码的自定义 CoreUtilities.LogToConsole 代码。

答案 1 :(得分:0)

你正在抓住一个特定的例外。可能抛出的东西是不同的东西。在catch块之后添加这样的东西:

catch (Exception otherException)
{
   CoreUtilities.LogToConsole(otherException.Message);
   ExceptionDispatchInfo.Capture(otherException).Throw(); // this is better than just "throw;"
}

答案 2 :(得分:0)

可能,因为您只捕获SocketException类型的异常,如果有任何其他类型的异常被引发,它将不会被捕获。