如何指定使用Socket.SendToAsync()时要发送的字节数

本文关键字:字节数 何指定 Socket SendToAsync | 更新日期: 2023-09-27 18:26:12

我已经将基于UDP的协议实现从使用Socket.BeginXXX方法移植到了Socket.XXXAsync方法,因为它们采用了具有Buffer、Offset和Count属性的SocketAsyncEventArgs类,因此可以对单个大缓冲区进行分段并用于每个操作。

不幸的是,我刚刚发现设置:

mySocketAsyncEventArgs.SendPacketsSendSize

使用发送数据报时不使用

mySocket.SendToAsync(mySocketAsyncEventArgs);

相反,将发送SocketAsyncEventArgs.Buffer中Count字节的Offset中的整个段!我不能使用Socket.SendPacketsElements,因为这只适用于连接的套接字!

通常我只有几个字节要发送,但有时会有一千个。。如果这些过载的全部目的是为了提高效率,那么它们于事无补!

请告诉我有一种方法可以指定每个操作在SocketAsyncEventArgs.Buffer中发送的字节数。。

如何指定使用Socket.SendToAsync()时要发送的字节数

UDP协议将始终在一个数据包中发送所有数据。如果要发送不基于数据大小的包,则需要使用TCP。

是否尝试将SendPacketsSendSize设置为0xFFFFFFFF并使用SendPacketsElement.EndOfPacket?。这在文档中听起来很有希望:http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.sendpacketssendsize.aspx

您可以使用SetBuffer()重载,在这里您不必传递byte[]缓冲区-只需调整要使用的现有索引和计数-然后在操作后将计数设置回其原始值:

mySocketAsyncEventArgs.SetBuffer(mySocketAsyncEventArgs.Offset, numOfBytesWritten);
mySocket.SendToAsync(mySocketAsyncEventArgs);
...
mySocketAsyncEventArgs.SetBuffer(mySocketAsyncEventArgs.Offset, originalBufferSize);