嗨
有没有一种方法可以确保所有的消息字节都已经用SendAsync发送了,这个方法的回调中没有提供任何信息,那么怎么能假设所有的消息都已经发送了呢?在发送操作中,我们可以使用套接字发送的最大消息大小是多少?是否存在任何限制,或者我们可以根据需要发送大量数据??
感谢您的清晰回复;)
发布于 2011-01-04 19:51:57
如果在没有错误指示的情况下调用回调,则消息已发送。
发布于 2011-05-15 09:51:19
是的,您需要的所有信息都在回调中:
private void SendSAEA_Completed(object sender, SocketAsyncEventArgs sendSAEA)
{
if (sendSAEA.BytesTransferred == 0 || sendSAEA.SocketError != SocketError.Success)
{
Close();
}
else
{
// Process sendSAEA.BytesTransferred
}
}此外,根据MSDN,我们可以在一次发送操作中发送缓冲区:
默认情况下,您可以使用以下命令控制缓冲区大小: Socket.SendBufferSize.
(http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendbuffersize.aspx)
并且,对于SendAsync:
对于面向消息的套接字,请不要超过基础Windows socket服务提供程序的最大消息大小。如果数据太长而无法通过底层服务提供程序进行原子传递,则不会传输任何数据,并且SendAsync方法将抛出一个SocketException,并将SocketAsyncEventArgs.SocketError设置为本机Winsock WSAEMSGSIZE错误代码(10040)。
(http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.sendasync.aspx)
https://stackoverflow.com/questions/4593215
复制相似问题