UDP-我可以发送两个数据报部分并让接收端将它们合并为一个吗?这可能是一个愚蠢的问题,但由于我对UDP比较陌生,所以...如果我有两个单独的字节数组,我需要接收端是一个大数组,例如:byte[]Array1={1,1,1}byte[]Array2={2,2,2}我可以避免创建缓冲区并将每个数组复制到其中,然后像这样发送该缓冲区:byte[]Buffer=newbyte[Array1.长度+Array2.长度];Buffer.BlockCopy(Array1,0,Buffer,0,Array1.Length);Buffer.BlockCopy(Array2,0,Buffer,Array1.Length,Array2.Length);udpClient.Send(Buffer,Buffer.Length);因为如果两者都很大,并且数据速率很高,那么复制会占用大量系统资源……所以我可以告诉udpClient我正在启动一个UDP片段,然后执行以下操作:udpClient.ImStartingOneBigDatagram();udp客户端。发送(Array1,Array1.Length);udpClient.Send(Array2,Array2.Length);udpClient.ThatsAllFolks();并确保接收方获得:byte[]recv={1,1,1,2,2,2}我正在使用C#,我不需要使用UdpClient,我只是在表达我的观点。使用WSASendMsg的Win32API等价物:publicintSend(IList>buffers,SocketFlagssocketFlags,outSocketErrorerrorCode)http://msdn.microsoft.com/en-us/library/ms145161.aspx但最后这是过早的优化,如果您执行一些测试,您会发现使用I/O分散收集数组,您至少需要9KB的数据才能获得性能提升。对于小缓冲区,即小于页面大小(x86上为4KB),在传递给套接字API之前自己构建连续缓冲区会更快。是的,您可以将任何数据块分成两部分并将其作为两个单独的UDP数据包发送出去。但是,UDP不保证送达,因此其中一部分可能会在运输途中丢失。如果收件人只收到一半的电子邮件,您会怎么做?显然,把它扔掉,但要记住一些关于UDP的事情。因此,要回答问题的最后一部分“并确保接收方将收到……”,答案是否定的。您使用的是UDP,所以您不能确定接收方会收到任何东西。如果你想为了方便而不是网络数据包大小问题将发送分成块,你当然可以编写自己的包装类,它位于UDP客户端之上并通过Send方法调用接受多个数据块,并且只当您在包装类上调用.ThatsAllFolks时,将所有数据发送到udpclient.Send()。但这并没有减少内存开销,因为包装器必须在大发送之前在内存中累积数据。这个包装器只是为了方便您的客户端代码。以上是C#学习教程:UDP-我可以发送两个数据报部分,让接收端将它们合二为一吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
