SendAsync完成后?

时间:2011-01-04 11:45:38

标签: c# .net sockets asynchronous

你好 有没有办法确保所有消息字节都与SendAsync一起发送,这个方法的回调中没有提供信息,那么如何假设所有消息都已发送?在发送操作中,我们可以使用套接字发送的最大消息大小是什么?是否有任何限制或我们可以发送我们需要的数据?

感谢您的回复;)

2 个答案:

答案 0 :(得分:1)

是的,您需要的所有信息都在回调中:

    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

答案 1 :(得分:0)

如果在没有错误指示的情况下调用回调,则表示已发送消息。