是直接传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试了一下,好像实际上也是整个文件传过客户端,再循环写入文件的,反应好慢
用切割成一段字节一段字节的方法,那就要调用远程对象好多次,服务器会不会开销很大呢?
希望高手们指点一下思路,如果有什么更好的方法就更好啦。先谢
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试了一下,好像实际上也是整个文件传过客户端,再循环写入文件的,反应好慢
用切割成一段字节一段字节的方法,那就要调用远程对象好多次,服务器会不会开销很大呢?
希望高手们指点一下思路,如果有什么更好的方法就更好啦。先谢
解决方案 »
- .net IIS站点,DLL更新,站点不确定性挂掉。求原因分析。
- 我的sql脚本中的汉字部分在英文系统中打开后总是显示乱码?
- 请问,c#函数手册这样的书什么书好啊,大家推荐下,谢谢
- C#2005 数据库开发有什么新技术可应用吗?
- 录入记录不用sqlcommand而是用dataset怎么实现啊?
- 请教一个xml的入门级问题:结点不能用数字吗?我想记录每日的事件,就已日期作为 结点,结果不 成。
- 用户什么样的控件打开一个文件会更好?
- 求教,关于属性set的迷惑
- gif要怎么打包,我创建了一个IMAGES子目录,居然不行,安装完后图骗全没了
- 有没有人知道,如何用C#处理2进制字符串
- C#windows应用程序2个form的问题!今天一天在线等待!
- socket编程和web应用程序通信
现在我的问题就是怎样传的问题,因为没做过Remoting传数据,所以要问下
http下去容易,可是上传不好搞,因为开发的是POS,很多时候是要双向通信的
大数据还是ftp或者是socket. 另外,ftp很简单,至少在.net的使用上来说是这样。
三易通服装进销存软件(服装店管理系统),非常简单好用的服装店软件!
三易通官网:http://www.3etsoft.cn
三易通软件(pos系统,收银软件,服装仓库管理软件,三易通服装零售软件,POS收银软件,三易通服装店收银软件,服装批发软件,三易通服装专卖店管理软件,服装营销管理系统,服装软件,鞋业销售管理软件,服装收银系统,三易通服装销售管理软件,鞋服管理软件,服装分销管理软件,服装营销软件,POS管理软件,三易通服装管理软件,三易通服装店软件,专卖店管理软件,三易通服装店管理系统,服装鞋帽软件,三易通服装进销存软件,鞋业软件,三易通服装店管理软件,服装进销存管理系统,服装鞋帽管理软件,三易通鞋店管理软件,服装鞋帽管理系统,服装分销系统,服装进销存系统,服装销售管理系统,服装库存管理软件)
三易通软件介绍:http://www.3etsoft.cn/Channel.Asp?ID=1