System.Net.Sockets.Stream выдает исключение System.StackOverflowExceptionC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 System.Net.Sockets.Stream выдает исключение System.StackOverflowException

Сообщение Anonymous »

Код: Выделить всё

_readResult
выдает ошибку, когда сообщение не получено от TCP-клиента.
У меня есть TCP-клиент, который взаимодействует с моим сервером, и он работает нормально, все сообщения работают хорошо, но когда я отключите клиент, я получаю исключение System.StackOverflowException и получаю поток:

at System.Net.Sockets.NetworkStream.BeginRead(Byte [], Int32, Int32, System.AsyncCallback, System.Object)
в VisualShot.TargetServer.Models.Communication.TcpMessageReader.readCompleteCallback(System.IAsyncResult)
в System.Threading.Tasks.TaskToAsyncResult+TaskAsyncResult ..ctor(System.Threading.Tasks.Task, System.Object, System.AsyncCallback)
at System.Threading.Tasks.TaskToAsyncResult.Begin(System.Threading.Tasks.Task, System.AsyncCallback, System.Object )
в System.Net.Sockets.Socket.BeginReceive(Byte[], Int32, Int32, System.Net.Sockets.SocketFlags, System.AsyncCallback, System.Object)
в System.Net.Sockets .NetworkStream.BeginRead(Byte[], Int32, Int32, System.AsyncCallback, System.Object)
в VisualShot.TargetServer.Models.Communication.TcpMessageReader.readCompleteCallback(System.IAsyncResult)
в System.Threading .Tasks.TaskToAsyncResult+TaskAsyncResult..ctor(System.Threading.Tasks.Task, System.Object, System.AsyncCallback)
at System.Threading.Tasks.TaskToAsyncResult.Begin(System.Threading.Tasks.Task, System .AsyncCallback, System.Object)
в System.Net.Sockets.Socket.BeginReceive(Byte[], Int32, Int32, System.Net.Sockets.SocketFlags, System.AsyncCallback, System.Object)
в System.Net.Sockets.NetworkStream.BeginRead(Byte[], Int32, Int32, System.AsyncCallback, System.Object)
в VisualShot.TargetServer.Models.Communication.TcpMessageReader.readCompleteCallback(System.IAsyncResult)
at System.Threading.Tasks.TaskToAsyncResult+TaskAsyncResult..ctor(System.Threading.Tasks.Task, System.Object, System.AsyncCallback)
at System.Threading.Tasks.TaskToAsyncResult.Begin(System.Threading .Tasks.Task, System.AsyncCallback, System.Object)
в System.Net.Sockets.Socket.BeginReceive(Byte[], Int32, Int32, System.Net.Sockets.SocketFlags, System.AsyncCallback, System. Object)
в System.Net.Sockets.NetworkStream.BeginRead(Byte[], Int32, Int32, System.AsyncCallback, System.Object)
в VisualShot.TargetServer.Models.Communication.TcpMessageReader.readCompleteCallback( System.IAsyncResult)
в System.Runtime.CompilerServices.TaskAwaiter+c.b__12_0(System.Action, System.Threading.Tasks.Task)
в System.Threading.ExecutionContext.RunInternal( System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
в System.Threading.Tasks.AwaitTaskContinuation.RunCallback(System.Threading.ContextCallback, System.Object, System.Threading.Tasks.Task ByRef)
в System.Threading.Tasks.Task.RunContinuations(System.Object)
в System.Threading.Tasks.Task

Код: Выделить всё

1[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].TrySetResult(Int32)    at System.Threading.Tasks.ValueTask
1+ValueTaskSourceAsTask+c[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].b__4_0(System.Object)
at System.Net.Sockets.SocketAsyncEventArgs+c.b__173_0(UInt32, UInt32, System.Threading.NativeOverlapped*)
at System.Threading.ThreadPoolTypedWorkItemQueue`2[[System.Threading.PortableThreadPool +IOCompletionPoller+Event, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Threading.PortableThreadPool+IOCompletionPoller+Callback, System.Private.CoreLib, Version=8.0.0.0, Culture =нейтральный, PublicKeyToken=7cec85d7bea7798e]].System.Threading.IThreadPoolWorkItem.Execute()
в System.Threading.ThreadPoolWorkQueue.Dispatch()
в System.Threading.PortableThreadPool+WorkerThread.WorkerThreadStart()

Код C#

Код: Выделить всё

private bool _reading;
private Stream _stream;
private TcpClient _client;
private IAsyncResult _readResult;
private bool _disposed;

private byte[] _parseBuffer = new byte[0];
private byte[] _buffer = new byte[1024];
private int _maxBytesRead;

private void readCompleteCallback(IAsyncResult readAsyncResult)
{
if (_reading)
{
Stream stream = (Stream)readAsyncResult.AsyncState;
int bytesRead = stream.EndRead(readAsyncResult);

if (bytesRead > _maxBytesRead || bytesRead == _buffer.Length)
{
_maxBytesRead = bytesRead;
}

byte[] newParseBuffer = new byte[_parseBuffer.Length + bytesRead];

_parseBuffer.CopyTo(newParseBuffer, 0);
for (int i = 0; i < bytesRead; i++)
{
newParseBuffer[i + _parseBuffer.Length] = _buffer[i];
}
_parseBuffer = newParseBuffer;

// Parsing
int bytesConsumed = MessageFactory.GetNextMessages(
_parseBuffer,        // buffer
0,                  // msgReadStart
_parseBuffer.Length, // totalBytesAvailableToConsume
out var messages);

newParseBuffer = new byte[_parseBuffer.Length - bytesConsumed];
for (int i = bytesConsumed; i < _parseBuffer.Length; i++)
{
newParseBuffer[i - bytesConsumed] = _parseBuffer[i];
}
_parseBuffer = newParseBuffer;

_readResult = stream.BeginRead(
_buffer,
0,
_buffer.Length,
new AsyncCallback(readCompleteCallback),
stream);
}
}
пытаемся обработать отключение и повторное подключение к TCP-клиенту

Подробнее здесь: https://stackoverflow.com/questions/790 ... wexception
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • System.Net.Sockets.Stream выдает исключение System.StackOverflowException
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Было выдано исключение System.StackOverflowException.
    Anonymous » » в форуме C#
    0 Ответы
    57 Просмотры
    Последнее сообщение Anonymous
  • Было выдано исключение System.StackOverflowException.
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Установка NavigationCacheMode на странице вызывает исключение System.StackOverflowException с CallWindowProc
    Anonymous » » в форуме C#
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Установка NavigationCacheMode на странице вызывает исключение System.StackOverflowException с CallWindowProc
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»