async Task ReceiveFromClient()
{
if (this.m_ClientSocket.Connected == true)
{
try
{
var asyncResult = this.m_ClientSocket.BeginReceive(m_LocalBuffer, 0, m_LocalBuffer.Length, SocketFlags.None, null, null);
/* Exception here */ int bytesReceived = await Task<int>.Factory.FromAsync(asyncResult, _ => this.m_ClientSocket.EndReceive(asyncResult)); /* This is the line with Exception */
if (bytesReceived != 0)
{
Console.WriteLine("Packets received");
m_LocalSecurity.Recv(m_LocalBuffer, 0, bytesReceived);
List<Packet> ReceivedPackets = m_LocalSecurity.TransferIncoming();
if (ReceivedPackets != null)
{
foreach (Packet _pck in ReceivedPackets)
{
new PacketHandler.PacketFromClientHandler(this, _pck, null);
}
}
}
else
{
this.DisconnectModuleSocket();
this.m_delDisconnect.Invoke(ref m_ClientSocket);
return;
}
await Task.Factory.StartNew(this.ReceiveFromClient);
}
catch (AggregateException ae)
{
Console.WriteLine(ae);
}
catch (SocketException ex)
{
Console.WriteLine($"{ex.Message} ({ex.GetType()})");
}
//Exceptions: ArgumentNullException, SocketException, ObjectDisposedException, ArgumentOutOfRangeException
catch (Exception e)
{
this.DisconnectModuleSocket();
this.m_delDisconnect.Invoke(ref m_ClientSocket);
return;
}
}
}
Здесь вы можете увидеть мой код, это Async TCP Socket, где я читаю Пакеты с клиента на сервер, все работает нормально, но когда пользователь отключается от сокета, строка «Комментарии» дает мне исключение.Я искал много часов, но я не нашел ответа на мою проблему.
Я уже пытался захватить исключение, но безуспешно.
Мне нужно что-то, чтоОстановите задачу и закройте соединение, когда пользователь отбрасывает соединение.
Ошибка, которую дает мне Visual Studio 2016:
Тип исключения: System.Net.Sockets.SocketException ErrorCode: 10054Сообщение: существующее соединение было принудительно закрыто удаленным хостом
Спасибо за помощь