2011-01-04 30 views
1

Hallo
Gibt es eine Möglichkeit, um sicherzustellen, dass alle Nachricht Bytes mit SendAsync gesendet hatte, gibt es keine Informationen im Rückruf dieser Methode so wie kann man davon ausgehen, dass die gesamte Nachricht gesendet wurde? Und was ist die maximale Größe der Nachricht, die wir senden können, indem wir den Socket in Send Operation verwenden? Gibt es irgendwelche Einschränkungen oder wir können Daten so groß wie wir brauchen ??Wenn SendAsync abgeschlossen ist?

Dank für klare Antworten;)

+0

Offensichtlich wird es nicht einfach aufhören Bytes zu senden, es sei denn es eine Ausnahme war. Vielleicht dem Typ vertrauen, um das zu tun, wofür er entworfen wurde? – leppie

Antwort

0

Wenn der Rückruf ohne eine Fehlermeldung genannt wird, dann ist die Nachricht gesendet wurde.

0

Ja, alle Informationen, die Sie brauchen, sind in dem Rückruf:

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

Auch der Puffer können wir in einem Sendebetrieb senden, nach MSDN:

  • Sie den Puffer steuern Größe mit: Socket.SendBufferSize.
  • Der Standardwert ist 8192.

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

Und für SendAsync:

Für nachrichtenorientierte Steckdosen, nicht die maximale Nachrichtengröße des überschreiten Basiswert Windows-Sockets-Service Anbieter. Wenn die Daten zu lang ist, um atomar durch den zugrundeliegenden Dienstanbieter übergeben, stehen keine Daten übertragen, und die SendAsync Verfahren eine Socket mit dem SocketAsyncEventArgs.SocketError wirft gesetzt zum nativen Winsock WSAEMSGSIZE Fehlercode (10040).

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

Verwandte Themen