C# TCP发送消息和传输96571.doc

上传人:hs****ma 文档编号:563819227 上传时间:2023-12-22 格式:DOC 页数:7 大小:37KB
返回 下载 相关 举报
C# TCP发送消息和传输96571.doc_第1页
第1页 / 共7页
C# TCP发送消息和传输96571.doc_第2页
第2页 / 共7页
C# TCP发送消息和传输96571.doc_第3页
第3页 / 共7页
C# TCP发送消息和传输96571.doc_第4页
第4页 / 共7页
C# TCP发送消息和传输96571.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《C# TCP发送消息和传输96571.doc》由会员分享,可在线阅读,更多相关《C# TCP发送消息和传输96571.doc(7页珍藏版)》请在金锄头文库上搜索。

1、C# TCP发送消息和传输文件96571本文由zhangzh2003贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 【背景】 最近做了一个双机备份,就是服务器上有个文件夹,会接收客户端传来的文件,而我们要 做的就是同步这台服务器和另一台备用服务器上的文件. 为了实现这个功能我们使用的 tcp 点对点传输. 【开发环境】 VS2005 【实现原理】 要实现同步要解决两个问题,一个是获取本地服务器上上传上来的文件,二是实现两台机 器间的文件传输. 第一个问题我们用的 FileSystemWatcher 这个可以监视指定文件夹下的文件变动,然 后我们把变动

2、的文件信息记录到数据库,在指定的时间间隔后同步两台机器的文件. 第二个问题我们用的 tcp 文件传输,我们按照一定的原则通过传输消息来告知备份服务 器的要传输的文件名称和大小,然后传输文件. 【代码】 1:FileSystemWatcher 监视文件变动的就不介绍了,很简单的 winform 控件应用. 2:为了完成文件传输,我做了一个 TcpHelper 类库,其中包括 TcpCommon,TcpClientHelper,TcpListenerHelper 三个类,TcpCommon 主要实现了 文件传输时用的一些公共的方法比如发送接收文件,发送接收消息,和文件 hash 的计算 TcpCo

3、mmon using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; using System.IO; using System.Net.Sockets; namespace Xpwy.Backup.PTcpHelper internal class TcpCommon private static readonly int _blockLength = 500 * 1024; / / 计算文件的 hash 值 / internal string C

4、alcFileHash(string FilePath) MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvid er(); byte hash; using (FileStream fs = new FileStream(FilePath, FileMode. Open, FileAccess.Read, FileShare.Read, 4096) hash = md5.ComputeHash(fs); return BitConverter.ToString(hash); / / 发送文件 / / / / internal boo

5、l SendFile(string filePath, NetworkStream stream) FileStream fs = File.Open(filePath, FileMode.Open); int readLength = 0; byte data = new byte_blockLength; /发送大小 byte length = new byte8; BitConverter.GetBytes(new FileInfo(filePath).Length).Copy To(length, 0); stream.Write(length, 0, 8); /发送文件 while

6、(readLength = fs.Read(data, 0, _blockLength) 0) stream.Write(data, 0, readLength); fs.Close(); return true; / / 接收文件 / / / / internal bool ReceiveFile(string filePath, NetworkStream stre am) try long count = GetSize(stream); if (count = 0) return false; long index = 0; byte clientData = new byte_blo

7、ckLength; if (File.Exists(filePath) File.Delete(filePath); string path=new FileInfo(filePath).Directory.FullName; if (!Directory.Exists(path) Directory.CreateDirectory(path); FileStream fs = File.Open(filePath, FileMode.OpenOrCr eate); try /计算当前要读取的块的大小 int currentBlockLength = 0; if (_blockLength 0

8、 & index count) clientData = new byte_blockLength; receivedBytesLen = 0; if (_blockLength count - index) currentBlockLength = _blockLength; else currentBlockLength = (int)(count - index); receivedBytesLen = stream.Read(clientDat a, 0, currentBlockLength); index += receivedBytesLen; fs.Write(clientDa

9、ta, 0, receivedBytesLen); catch (Exception ex) return false; finally fs.Close(); catch (Exception ex) return false; return true; / / 发送消息 / / / / internal bool SendMessage(string message, NetworkStream strea m) byte data = Encoding.UTF8.GetBytes(message); byte resultData = new byte8 + data.Length; B

10、itConverter.GetBytes(data.Length).CopyTo(resultData, 0); data.CopyTo(resultData, 8); stream.Write(resultData, 0, resultData.Length); return true; / / 读取消息 / / / internal string ReadMessage(NetworkStream stream) string result = ; int messageLength = 0; byte resultbyte = new byte500 * 1024; /读取数据大小 in

11、t index = 0; int count = GetSize(stream); byte data = new bytecount; while (index count & (messageLength = stream.Read(dat a, 0, count - index) != 0) data.CopyTo(resultbyte, index); index += messageLength; result = Encoding.UTF8.GetString(resultbyte, 0, index); return result; / / 获取要读取的数据的大小 / / / p

12、rivate int GetSize(NetworkStream stream) int count = 0; byte countBytes = new byte8; try if (stream.Read(countBytes, 0, 8) = 8) count = BitConverter.ToInt32(countBytes, 0); else return 0; catch (Exception ex) return count; TcpClientHelper using System; using System.Collections.Generic; using System.

13、Text; using System.Net.Sockets; namespace Xpwy.Backup.PTcpHelper public class TcpClientHelper:IDisposable TcpClient client; NetworkStream netstream; string _serverip = 127.0.0.1; int _port = 8080; TcpCommon tcpCommon = new TcpCommon(); #region TcpClientHelper constructor public TcpClientHelper(strin

14、g strServerIP, int serverPort) _serverip = strServerIP; _port = serverPort; #endregion public void Start() client = new TcpClient(_serverip, _port); netstream = client.GetStream(); public void Stop() if (netstream != null) netstream.Close(); if (client != null) client.Close(); #region TcpCommon 所有方法 public string CalcFileHash(string FilePath) return tcp

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号