Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何指定使用Socket.SendToAsync()时要发送的字节数?_C#_Sockets_.net 4.0_Udp_System.net - Fatal编程技术网

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

C# 如何指定使用Socket.SendToAsync()时要发送的字节数?,c#,sockets,.net-4.0,udp,system.net,C#,Sockets,.net 4.0,Udp,System.net,我已经将基于UDP的协议实现从使用Socket.BeginXXX方法移植到Socket.XXXAsync方法,因为它们采用具有缓冲区、偏移量和计数属性的类,因此可以分割单个大缓冲区并用于每个操作 不幸的是,我刚刚发现: mySocketAsyncEventArgs.SendPacketsSendSize 使用以下方式发送数据报时不使用: mySocket.SendToAsync(mySocketAsyncEventArgs); 而是发送SocketAsyncEventArgs.Count b

我已经将基于UDP的协议实现从使用Socket.BeginXXX方法移植到Socket.XXXAsync方法,因为它们采用具有缓冲区、偏移量和计数属性的类,因此可以分割单个大缓冲区并用于每个操作

不幸的是,我刚刚发现:

mySocketAsyncEventArgs.SendPacketsSendSize
使用以下方式发送数据报时不使用:

mySocket.SendToAsync(mySocketAsyncEventArgs);
而是发送SocketAsyncEventArgs.Count bytes的偏移量缓冲区中的整个段!我不能使用Socket.SendPacketsElements,因为这仅适用于连接的套接字

通常我只能发送几个字节,但有时会发送一千个字节。。如果这些超负荷的全部目的是为了提高效率,那么它们是没有帮助的


请告诉我有什么方法可以指定在SocketAsyncEventArgs中发送的字节数。每次操作的缓冲区。

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

是否尝试将
SendPacketsSendSize
设置为0xffffff并使用
SendPacketsElement.EndOfPacket
?。在文档中听起来很有希望:

您可以在不需要传递字节[]缓冲区的情况下使用重载-只需调整要使用的现有索引和计数-然后在操作后将计数设置回其原始值:

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

我知道UDP在一个数据报中发送所有数据,但您仍然可以决定数据报的大小,例如,如果您使用BeginSendTo():啊,但这仅在您使用SendPacketsElements时使用,然后您必须使用SendPacketsAsync发送“尽管SendPacketsAsync方法适用于面向连接的协议,但如果您首先调用BeginConnect、Connect或ConnectAsync方法来建立默认的远程主机,SendPacketsAsync方法也适用于无连接的协议。”但我可能有许多远程主机,我希望使用一个套接字从。。