是直接传FileStream过去,然后在客户端循环读取远程对象:        
public FileStream GetFile(string filePath)
{
    if (File.Exists(filePath))
    {
         FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
         return fs;
    }
    else
    {
         return null;
    }
}客户端:
IGetFiles GetFile = (IGetFiles)Activator.GetObject(typeof(IGetFiles), "tcp://192.168.10.249:9910");
FileStream fsRead = GetFiles.GetFile("F:\\大文件.zip");
if (!object.Equals(fsRead, null) && fsRead.Length > 0)
{
     string save_Path = "D:\\测试\\大文件.zip";
     FileStream fsWrite = new FileStream(save_Path, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
     long totalLen = fsRead.Length;
     long finishLen = 0;
     int len = 0;
     byte[] buffer = new byte[10240];
     while (totalLen > finishLen)
     {
         len = fsRead.Read(buffer, 0, buffer.Length);
         fsWrite.Write(buffer, 0, len);
         fsWrite.Flush();
         buffer = new byte[10240];
         finishLen += len;
     }
     fsWrite.Close();
}还是在服务器端把文件分割成好多byte[]数组,循环发送啊?远程对象:
public byte[] GetFile(string filePath, int offset)
{
    if (File.Exists(filePath))
    {
         FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
         byte[] buffer = new byte[10240];
         fs.Read(buffer, offset, buffer.Length);
         return buffer;
    }
    else
    {
         return null;
    }
}客户端:
int offset = 0;  //全局变量,记录上一次下载位置
int totalLen = 300000; //文件总长度,可以另写一个远程对象获取,这里就不写了,假设已知吧
IGetFiles GetFile = (IGetFiles)Activator.GetObject(typeof(IGetFiles), "tcp://192.168.10.249:9910");
string save_Path = "D:\\测试\\大文件.zip";
FileStream fsWrite = new FileStream(save_Path, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
while(totalLen > offset)
{
    byte[] buffer = GetFiles.GetFile("F:\\大文件.zip",offset);
    offset += buffer.lenth;
    fsWrite.Write(buffer, 0, buffer.lenth);
    fsWrite.Flush();
}
直接传fileStream试了一下,好像实际上也是整个文件传过客户端,再循环写入文件的,反应好慢
用切割成一段字节一段字节的方法,那就要调用远程对象好多次,服务器会不会开销很大呢?
希望高手们指点一下思路,如果有什么更好的方法就更好啦。先谢

解决方案 »

  1.   

    断点续传好搞,无非就是把当前任务保存起来,还有当前下载到的位置记下来,单线程的话应该不难
    现在我的问题就是怎样传的问题,因为没做过Remoting传数据,所以要问下
      

  2.   

    一定要用Remoting吗,http ftp不好?
      

  3.   

    写FTP太复杂啦,所以想看看Remoting好不好解决
    http下去容易,可是上传不好搞,因为开发的是POS,很多时候是要双向通信的
      

  4.   

    Remoting不太好解决,还是那句话,用socket自己操作,想干什么就干什么,直观,易于控制,灵活;分块传的时候,一定要有自己的协议,如果没有传送成功(网络错误/写入磁盘错误等)是需要通知另一端的,重新写入磁盘或要求重发,然后还有文件块之间的编号问题,不一定你先发的块就先到,
      

  5.   

    remoting 不适合传输大数据。它类似http,是同步,无连接的tcp,并且如果你想控制传输数据的话,非常麻烦,它只是提供了一些傻瓜的方法来调用远端函数。这样对于传输大量数据,你就需要切割开,自己控制数据重组。
    大数据还是ftp或者是socket. 另外,ftp很简单,至少在.net的使用上来说是这样。
      

  6.   

    三易通软件(三易通服装进销存软件,三易通服装进销存管理软件,三易通服装进销存管理系统,三易通服装店管理软件,三易通服装店管理系统,三易通服装销售管理软件,三易通服装销售管理系统,三易通服装零售管理软件,三易通服装零售管理系统,三易通服装店软件,三易通服装店收银软件)
    三易通服装进销存软件(服装店管理系统),非常简单好用的服装店软件!
    三易通官网:http://www.3etsoft.cn
    三易通软件(pos系统,收银软件,服装仓库管理软件,三易通服装零售软件,POS收银软件,三易通服装店收银软件,服装批发软件,三易通服装专卖店管理软件,服装营销管理系统,服装软件,鞋业销售管理软件,服装收银系统,三易通服装销售管理软件,鞋服管理软件,服装分销管理软件,服装营销软件,POS管理软件,三易通服装管理软件,三易通服装店软件,专卖店管理软件,三易通服装店管理系统,服装鞋帽软件,三易通服装进销存软件,鞋业软件,三易通服装店管理软件,服装进销存管理系统,服装鞋帽管理软件,三易通鞋店管理软件,服装鞋帽管理系统,服装分销系统,服装进销存系统,服装销售管理系统,服装库存管理软件)
    三易通软件介绍:http://www.3etsoft.cn/Channel.Asp?ID=1