2011-01-04 4 views
1

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

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

+0

Очевидно, что это привычка просто прекратить отправку байт, если не был исключением. Может быть, доверять типу делать то, для чего он предназначен? – leppie

ответ

0

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

0

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

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 набором к родному Winsock WSAEMSGSIZE коду ошибки (10040).

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

Смежные вопросы