Когда SendAsync завершится? - PullRequest
       4

Когда SendAsync завершится?

1 голос
/ 04 января 2011

Привет
Есть ли способ убедиться, что все байты сообщения отправлены с SendAsync, в обратном вызове этого метода нет информации, так как можно предположить, что все сообщение отправлено ??И каков максимальный размер сообщения, которое мы можем отправить с помощью сокета при операции отправки?существует ли какое-либо ограничение или мы можем отправлять данные настолько большого размера, насколько нам нужно ??

Спасибо за четкие ответы;)

Ответы [ 2 ]

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

Да, вся необходимая информация находится в обратном вызове:

    private void SendSAEA_Completed(object sender, SocketAsyncEventArgs sendSAEA)
    {        
            if (sendSAEA.BytesTransferred == 0 || sendSAEA.SocketError != SocketError.Success)
            {
                Close();
            }
            else
            {
                 // Process sendSAEA.BytesTransferred
            }
     }

Кроме того, буфер, который мы можем отправить за одну операцию отправки, в соответствии с MSDN:

  • Вы можете контролировать размер буфера с помощью: Socket.SendBufferSize.
  • По умолчанию 8192.

(http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendbuffersize.aspx)

А для SendAsync:

Для сокетов, ориентированных на сообщения, не превышать максимальный размер сообщения базовая служба сокетов Windows поставщик. Если данные слишком длинные для пройти атомно через нижележащий поставщик услуг, нет данных передается и метод SendAsync создает исключение SocketException с SocketAsyncEventArgs.SocketError set на родной Winsock WSAEMSGSIZE код ошибки (10040).

(http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendasync.aspx)

0 голосов
/ 04 января 2011

Если обратный вызов вызван без указания ошибки, то сообщение отправлено.

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