1

我使用客户端服务器程序通过网络发送文件。在读取文件的字节(与File.ReadAllBytes())后,我将字节数组设置为对象的字段。然后序列化并将该对象发送到客户端,客户端应该在其中反序列化对象并通过使用BinaryWriter来获取文件。将文件的字节数组作为字段序列化对象

客户端 - 服务器之间的所有消息都是通过序列化一个名为Command的类的对象传递的。

当文件加载到字节数组时,此方法似乎消耗大量内存。

任何人都可以提出另一种机制,我可以一点一点地发送文件,而不会消耗太多的内存。是否可以发送文件的内存地址,然后服务器使用客户端上的内存地址(使用循环)一点一点地提取文件?

回答

2

我认为最好的选择是使用流式传输。这是wcf的本地功能。

你可以找到帮助herehere

编辑:

你可以尝试读取&发送类似这样:

using (FileStream fs = new FileStream(@"C:\...\file.txt", FileMode.Open)) 
    { 
    byte[] buffer = new byte[1024]; 
    int len; 
    while ((len = fs.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     //client.Send(buffer, 0, len); 
    } 
    } 
+0

我已经使用套接字。这似乎需要对代码进行完整的重组,不是吗? @cybermaxs – manas

+0

是的,但它会在wcf中更容易。我的回答并不合适,因为我是wcf的忠实粉丝。也检查http://stackoverflow.com/questions/5659189/how-to-split-a-large-file-into-chunks-in-c – Cybermaxs

+0

yeps谢谢,这似乎是一个很好的文章,但仍然是不可能的因为我通过序列化/反序列化对象在客户端服务器之间传递消息。再次重组是必要的,对吧? @cybermaxs – manas

相关问题