我的程序创建一个新的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)
?