gpt4 book ai didi

c# - 发送两个数据包(一个有长度,一个有数据)或发送一个连接的数据包?

转载 作者:太空宇宙 更新时间:2023-11-03 16:41:00 24 4
gpt4 key购买 nike

哪个更好?

在每个之前假设这段代码:

byte[] data = Encoding.ASCII.GetBytes("Test Packet Message");
byte[] header = BitConverter.GetBytes(data.Length);

答:

clientStream.Write(header, 0, header.Length);
clientStream.Write(data, 0, data.Length);

乙:

byte[] bytes = new byte[header.Length + data.Length];

Buffer.BlockCopy(header, 0, bytes, 0, header.Length);
Buffer.BlockCopy(data, 0, bytes, header.Length, data.Length);

clientStream.Write(bytes, 0, bytes.Length);

A 的好处是不必将字节从一个数组复制到另一个数组,因此在 CPU 上更容易(客户端和服务器都必须发送和接收数据,因此 A 如果发送大量数据,方法可能会更快。

B 的好处是只发送一个数据包。人们谈论发送单个小数据包的开销。此外,Nagle 的算法可能会与 A 一起玩,如 this post 所证明的那样.

如果有一种方法可以完成 A 而不必将 header 和数据数组中的所有字节复制到字节数组,那将是一件好事,但我不确定这是否可行.. 似乎有一种方法可以优化它/使其更有效率,但我不确定。

最佳答案

我希望接受多个缓冲区的以下方法能够实现您正在寻找的内容。但是,我想对其进行测试,以确定究竟发送了什么数据包。

//Sends the set of buffers in the list to a connected Socket, using the specified SocketFlags.
Socket.Send Method (IList<ArraySegment<Byte>>, SocketFlags)

请参阅以下帖子:

UDP - Can I send two datagram parts, and make the receiving end combine them into one?

关于c# - 发送两个数据包(一个有长度,一个有数据)或发送一个连接的数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7491834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com