Вопрос по SocketAsyncEventArgs (SAEA) - PullRequest
0 голосов
/ 04 мая 2011

Я реализовал асинхронное сокетное соединение и успешно установил связь с клиентом.Проблема, с которой я сейчас сталкиваюсь, заключается в отправке пакетов клиенту по таймеру, не зависящему от определенного протокола.

Каждый раз, когда я вызываю SAEA.AcceptSocket.SendAsync (...) Я получаю исключение: System.InvalidOperationException: «Асинхронная операция с сокетом уже выполняется с использованием этого экземпляра SocketAsyncEventArgs.»

Я провел некоторое тестирование и не могу вызвать SAEA.AcceptSocket.SendAsync (...) сразу один за другим.Это был способ, которым SAEA был разработан, или я делаю что-то не так в своем коде, который вызывает исключение?

Я потратил немного времени на поиски в Google, но не могу найти какой-либоответы.Если бы кто-то мог помочь мне или, по крайней мере, направить меня в правильном направлении, это было бы очень ценно!

Спасибо!

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

На один экземпляр SocketAsyncEventArgs может быть отложена только одна операция. Вам нужно либо дождаться завершения ожидающей операции, либо просто использовать уникальный экземпляр SocketAsyncEventArgs для каждой отправки.

1 голос
/ 04 мая 2011

Каждый раз, когда вы отправляете сообщение, оно пытается отправить сообщение или подождать до истечения времени ожидания или ошибки.
Возможно, вы все еще обрабатываете предыдущее сообщение и пытаетесь отправить снова, используя тот же SocketAsyncEventArgs. Если SocketAsyncEventArgs ожидает следующего процесса, попросив его перейти к другому процессу, вы получите эту ошибку.

Так что, если слушатель является сервером, когда клиент пытается отправить, я бы предложил вам создать новое соединение и создать для него новый SocketAsyncEventArgs.

0 голосов
/ 04 мая 2011

я думаю, что вам нужно сначала вызвать SAEA.AcceptSocket.EndAccept (...), чтобы завершить процесс асинхронного соединения, или SAEA.AcceptSocket.EndSend (...), чтобы завершить предыдущую отправку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...