为了传送文件,用remoting 实现很简单容易,有工程源码和演示程序下载,是从我写的一个网络库的一个子模块;有注解,不加以文字说明了。
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//*
作者:S.F.
blog:www.cnblogs.com/chinasf
*/
using System;
using System.ComponentModel;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.IO;
using System.Text;
using System.Net;
namespace SocketLibrary
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// NetFileTransfer 的摘要说明。
/// 用Remoting 实现文件传输管理
/// </summary>
public class NetFileTransfer: MarshalByRefObject
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
public NetFileTransfer() : base()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 获取文件的数组
/// </summary>
/// <param name="filePath">文件路径</param>
/// <returns>数组(默认null)</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public byte[] GetFileBytes(string filePath)
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(File.Exists(filePath))
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
FileStream fs =new FileStream(filePath,FileMode.Open,FileAccess.Read,FileShare.Read);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer,0,buffer.Length);
fs.Close();
return buffer;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
return null;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else
{
return null;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 发送数据
/// </summary>
/// <param name="savePath">保存路径</param>
/// <returns>状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SendFileBytes(byte[] fileBytes,string savePath)
{
if(fileBytes==null)return false;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
FileStream fs = new FileStream(savePath,FileMode.OpenOrCreate,FileAccess.Write,FileShare.Write);
fs.Write(fileBytes,0,fileBytes.Length);
fs.Close();
return true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
return false;
}
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public class NetFileTransferServer : Component
{
private TcpChannel chan =null;
private int _Port = 8085;
private string _RegisterMethod = "FileService";
private bool _Active =false;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 构造
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public NetFileTransferServer() : base()
{
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 绑定端口
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public int Port
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{
return this._Port;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{
this._Port = value;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 绑定注册方法名
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public string RegisterMethod
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{
return this._RegisterMethod;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{
this._RegisterMethod = value;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 获取激活状态
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool Active
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{
return this._Active;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 启动服务
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void Start()
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
chan = new TcpChannel(this._Port);
ChannelServices.RegisterChannel(chan);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(NetFileTransfer),this._RegisterMethod,WellKnownObjectMode.SingleCall);
this._Active = true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch(Exception e)
{
Console.WriteLine(e.Message);
this._Active = false;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 停止服务
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void Stop()
{
this._Active = false;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(chan!=null)
{
ChannelServices.UnregisterChannel(chan);
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 获取注册的方法协议全称
/// </summary>
/// <param name="IpAddressIndex">IP地址索引号(支持多IP)</param>
/// <returns>协议全称</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public string NoticeRegisterMethodName(int IpAddressIndex)
{
//tcp://localhost:8085/FileService
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
IPHostEntry heserver = Dns.Resolve("localhost");
IPAddress currAddr = heserver.AddressList[IpAddressIndex];
return String.Format("tcp://{0}:{1}/{2}",currAddr.ToString(),this._Port.ToString(),this._RegisterMethod);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch(Exception e)
{
return e.Message;
}
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public class NetFileTransferClient : Component
{
private NetFileTransfer nft = null;
private bool _Active =false;
private string _NoticeRegisterMethodName = "tcp://localhost:8085/FileService";
private int _Port = 8085;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public NetFileTransferClient() : base()
{
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 绑定端口
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public int Port
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{
return this._Port;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{
this._Port = value;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 绑定注册方法名
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public string NoticeRegisterMethodName
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{
return this._NoticeRegisterMethodName;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
set
{
this._NoticeRegisterMethodName = value;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 获取激活状态
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool Active
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{
return this._Active;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 连接器
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public NetFileTransfer NetFileTransferObject
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
get
{
return this.nft;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 连接到服务器
/// </summary>
/// <returns>状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool Connect()
{
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
nft = (NetFileTransfer)Activator.GetObject(typeof(SocketLibrary.NetFileTransfer),_NoticeRegisterMethodName);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(nft!=null && nft.ToString().Length>1)
{
this._Active = true;
return true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else
{
this._Active =false;
return false;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
this._Active =false;
return false;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 停止连接
/// </summary>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void Disconnection()
{
nft = null;
_Active =false;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 获取文件
/// </summary>
/// <param name="RemoteFilePath">文件路径</param>
/// <returns>文件数组</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public byte[] GetFileBytes(string RemoteFilePath)
{
if(!_Active)return null;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
return nft.GetFileBytes(RemoteFilePath);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
return null;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 获取文件,并保存
/// </summary>
/// <param name="RemoteFilePath">远程文件路径</param>
/// <param name="LocalSavePath">本地保存路径</param>
/// <returns>状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool GetFile(string RemoteFilePath,string LocalSavePath)
{
if(!_Active)return true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
byte[] filebytes = nft.GetFileBytes(RemoteFilePath);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(filebytes!=null)
{
FileStream fs = new FileStream(LocalSavePath,FileMode.CreateNew,FileAccess.Write,FileShare.Write);
fs.Write(filebytes,0,filebytes.Length);
fs.Close();
return true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else
{
return false;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
return false;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 发送文件
/// </summary>
/// <param name="fileBytes">文件数组</param>
/// <param name="RemoteSavePath">保存路径</param>
/// <returns>保存状态</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SendFileBytes(byte[] fileBytes,string RemoteSavePath)
{
if(!_Active)return false;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
return nft.SendFileBytes(fileBytes,RemoteSavePath);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
return false;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 发送文件,并保存到主机
/// </summary>
/// <param name="LocalFilePath">本地文件</param>
/// <param name="RemoteSavePath">远端保存路径</param>
/// <returns>是否成功</returns>
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public bool SendFile(string LocalFilePath,string RemoteSavePath)
{
if(!_Active)return false;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
try
{
if(!File.Exists(LocalFilePath))return false;
FileStream fs = new FileStream(LocalFilePath,FileMode.Open,FileAccess.Read,FileShare.Read);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer,0,buffer.Length);
fs.Close();
return nft.SendFileBytes(buffer,RemoteSavePath);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}catch
{
return false;
}
}
}
}
点这里下载工程代码和演示程序