C# socket重构(数据发送)

标签 c# sockets networking refactoring

假设 Byte[] refArchiveData 的大小约为 30-100 MB。我想使用 NetworkStream 流 对象将它发送到服务器:

            TcpClient client = new TcpClient(server, port);

            Byte[] refLengthBytes = new Byte[4];
            Byte[] refArchiveData = null;

            refArchiveData = File.ReadAllBytes("C:/Temp/Python25.zip");

            Console.WriteLine("Archive data length is {0}", refArchiveData.Length);

            NetworkStream stream = client.GetStream();

            refLengthBytes = System.BitConverter.GetBytes(refArchiveData.Length);

            stream.Write(refLengthBytes, 0, 4);

            stream.Write(refArchiveData, 0, refArchiveData.Length);

            stream.Close();

            client.Close();

我必须如何修改发送存档的代码部分?也许将它分成 256-512 字节的 block ?

感谢您的任何建议!

最佳答案

使用 Stream.CopyTo方法。这样您就不必将整个文件加载到数组中(内存中)。

using (var file = File.OpenRead("<path to file>"))
using (var client = new TcpClient("<server>", <port>))
using (var netStream = client.GetStream())
{
    ...
    file.CopyTo(netStream);
    ...
}

关于C# socket重构(数据发送),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4428407/

相关文章:

c# - 如何向 EF 中包含的实体添加 where 子句?

c# - 如何将 FileStreamResult 转换为 IFormFile?

linux - 如何最有效地处理大量文件描述符?

python - 如何检查一个网络是否包含在 Python 中的另一个网络中?

c# - 检查枚举是否包含多个标志

c# - 以互操作方式传递对象 - JavaBean 到 C#

javascript - Socket.io http ://localhost:3000/socket. io/socket.io.js 404(未找到) - 如何配置 socket.IO - nodejs、apache2、websockets

c - 通过 TCP 套接字发送 unicode,字节顺序如何

networking - 有哪些不使用 TCP 或 UDP 等端口的基于 IP 的协议(protocol)?

networking - 在 tcpdump 之类的工具中,网络数据包究竟是在什么时候捕获的?