每两次尝试都会发生C#SocketException(0x80004005)

时间:2018-11-19 10:43:34

标签: c# sockets socketexception

我的程序创建一个新的TCP套接字,将请求发送到服务器并读取响应。如果请求响应,则程序发送一个确认,否则发送否定的确认。这样可以发送和接收零件的作品。

问题在于,当我第二次调用该方法时,它会抛出SocketException (0x80004005)。第三次尝试按预期方式进行,但是每两次尝试向套接字发送请求都会失败。

public void Send(byte[] request)
{
    var buffer = new byte[1024];
    var received = 0;
    try
    {
        using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
        {
            socket.Connect(Address, Port);
            socket.ReceiveTimeout = 5000;

            socket.Send(request);

            while ((received = socket.Receive(buffer)) > 0)
            {
                var response = buffer.Take(received);

                if (IsRequested(response))
                {
                    socket.Send(ACK);
                    var text = Encoding.UTF8.GetString(response);
                    Console.WriteLine(text);
                    return;
                }
            }
            socket.Send(NAK);
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }
}

我尝试断开,关闭,处置这三者的所有可能组合,但均未成功。

我发现,如果在发送确认后立即抛出异常,则该方法每次都会起作用!

    if (IsRequested(response))
    {
        socket.Send(ACK);
        var text = Encoding.UTF8.GetString(response);
        Console.WriteLine(text);
        throw new Exception("Deliberate exception");
    }

我的问题: 如果没有抛出异常,为什么我每两次尝试都会得到SocketException (0x80004005)

0 个答案:

没有答案