C# tcp发送消息和传输文件
2009-05-31 13:19
363 查看
【背景】
最近做了一个双机备份,就是服务器上有个文件夹,会接收客户端传来的文件,而我们要做的就是同步这台服务器和另一台备用服务器上的文件.
为了实现这个功能我们使用的tcp点对点传输.
【开发环境】
VS2005
【实现原理】
要实现同步要解决两个问题,一个是获取本地服务器上上传上来的文件,二是实现两台机器间的文件传输.
第一个问题我们用的FileSystemWatcher这个可以监视指定文件夹下的文件变动,然后我们把变动的文件信息记录到数据库,在指定的时间间隔后同步两台机器的文件.
第二个问题我们用的tcp文件传输,我们按照一定的原则通过传输消息来告知备份服务器的要传输的文件名称和大小,然后传输文件.
【代码】
1:FileSystemWatcher监视文件变动的就不介绍了,很简单的winform控件应用.
2:为了完成文件传输,我做了一个TcpHelper类库,其中包括TcpCommon,TcpClientHelper,TcpListenerHelper三个类,TcpCommon主要实现了文件传输时用的一些公共的方法比如发送接收文件,发送接收消息,和文件hash的计算
TcpCommon
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Net.Sockets;
namespace Xpwy.Backup.PTcpHelper
TcpClientHelper
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
namespace Xpwy.Backup.PTcpHelper
TcpListenerHelper
Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace Xpwy.Backup.PTcpHelper
3:调用的代码
server端:
Code
private void FileBackup(object arg)
{
TcpClientHelper client = (TcpClientHelper)arg;
//获取需备份的文件
DataTable dt = this._oFileWatch.GetBackupFiles();
if (dt != null)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
client.SendMessage("FileBak");
if (client.ReadMessage().ToLower() == "filebakok")
{
client.SendMessage(dt.Rows[i]["RelativePath"].ToString());
client.SendFile(dt.Rows[i]["FullPath"].ToString());
client.SendMessage(client.CalcFileHash(dt.Rows[i]["FullPath"].ToString()));
if (client.ReadMessage().ToLower() == "ok")
{
LOGClass.WriteLog("备份文件【" + dt.Rows[i]["FullPath"].ToString() + "】成功");
}
else
{
LOGClass.WriteLog("备份文件【" + dt.Rows[i]["FullPath"].ToString() + "】失败。");
}
}
}
this._oFileWatch.ClearTmp();
}
}
zhuan:http://www.cnblogs.com/zrx401558287/archive/2009/03/13/1410871.html
最近做了一个双机备份,就是服务器上有个文件夹,会接收客户端传来的文件,而我们要做的就是同步这台服务器和另一台备用服务器上的文件.
为了实现这个功能我们使用的tcp点对点传输.
【开发环境】
VS2005
【实现原理】
要实现同步要解决两个问题,一个是获取本地服务器上上传上来的文件,二是实现两台机器间的文件传输.
第一个问题我们用的FileSystemWatcher这个可以监视指定文件夹下的文件变动,然后我们把变动的文件信息记录到数据库,在指定的时间间隔后同步两台机器的文件.
第二个问题我们用的tcp文件传输,我们按照一定的原则通过传输消息来告知备份服务器的要传输的文件名称和大小,然后传输文件.
【代码】
1:FileSystemWatcher监视文件变动的就不介绍了,很简单的winform控件应用.
2:为了完成文件传输,我做了一个TcpHelper类库,其中包括TcpCommon,TcpClientHelper,TcpListenerHelper三个类,TcpCommon主要实现了文件传输时用的一些公共的方法比如发送接收文件,发送接收消息,和文件hash的计算
TcpCommon
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
using System.Net.Sockets;
namespace Xpwy.Backup.PTcpHelper
TcpClientHelper
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
namespace Xpwy.Backup.PTcpHelper
TcpListenerHelper
Code
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace Xpwy.Backup.PTcpHelper
3:调用的代码
server端:
Code
private void FileBackup(object arg)
{
TcpClientHelper client = (TcpClientHelper)arg;
//获取需备份的文件
DataTable dt = this._oFileWatch.GetBackupFiles();
if (dt != null)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
client.SendMessage("FileBak");
if (client.ReadMessage().ToLower() == "filebakok")
{
client.SendMessage(dt.Rows[i]["RelativePath"].ToString());
client.SendFile(dt.Rows[i]["FullPath"].ToString());
client.SendMessage(client.CalcFileHash(dt.Rows[i]["FullPath"].ToString()));
if (client.ReadMessage().ToLower() == "ok")
{
LOGClass.WriteLog("备份文件【" + dt.Rows[i]["FullPath"].ToString() + "】成功");
}
else
{
LOGClass.WriteLog("备份文件【" + dt.Rows[i]["FullPath"].ToString() + "】失败。");
}
}
}
this._oFileWatch.ClearTmp();
}
}
zhuan:http://www.cnblogs.com/zrx401558287/archive/2009/03/13/1410871.html
相关文章推荐
- C# tcp发送消息和传输文件
- C# tcp发送消息和传输文件
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
- [转载]C# TCP实现多个客户端与服务端 数据 与 文件的传输
- C#TCPClient应用-一个简单的消息发送和接收
- C#TCPClient应用-一个简单的消息发送和接收 (转)
- Socket通讯-C#客户端与Java服务端通讯(发送消息和文件)
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
- TCP数据传输(四):上传文件操作(将客户端的文件发送到服务器)
- 基于C#的TCP文件传输 由于水平有限,代码粗糙请见谅,vs2015编写 文件发送附代码
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
- C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)
- C# TCP实现多个客户端与服务端 数据 与 文件的传输
- C# TCP服务端 可以接收其他语言或平台发送的TCP消息
- C# TcpClient网络编程传输文件(带文件名)(必须看)
- C#中TCP实现多个客户端与服务端数据与文件的传输
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
- C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)
- qt 下UDP消息的接收和发送和TCP发送文件
- C#TCPClient应用-一个简单的消息发送和接收