你好 有没有办法确保所有消息字节都与SendAsync一起发送,这个方法的回调中没有提供信息,那么如何假设所有消息都已发送?在发送操作中,我们可以使用套接字发送的最大消息大小是什么?是否有任何限制或我们可以发送我们需要的数据?
感谢您的回复;)
答案 0 :(得分:1)
是的,您需要的所有信息都在回调中:
private void SendSAEA_Completed(object sender, SocketAsyncEventArgs sendSAEA)
{
if (sendSAEA.BytesTransferred == 0 || sendSAEA.SocketError != SocketError.Success)
{
Close();
}
else
{
// Process sendSAEA.BytesTransferred
}
}
另外,根据MSDN,我们可以在一个发送操作中发送缓冲区:
(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)
如果在没有错误指示的情况下调用回调,则表示已发送消息。