用C# 做文件传输系统CS模式的,用什么方式比较好?

用C# 做文件传输系统CS模式的,用什么方式比较好?,第1张

FTP属于比较高层的协议了,底层还是Socket形式实现的

用什么主要取决于你这套系统用来做什么,你说的比较简单,单纯的客户端服务器之间的文件互传,用socket写就可以了,为了应对大文件的问题可以参考下稀疏文件(NTFS的,用其他文件系统可以略过)、断点续传,基本就可以了。如果socket比较麻烦你可以去找一些开源的数据传输的库,帮你封装好的,你只要写好应用就皮败仔行了。枯宽

实现基本功能后如果想添加高级功能,可以参考下数据校验燃汪、数据包修复等等,www.sf.net上有很多现成的文件传输工具项目,把源码下回来参考实际实现比单单看资料好

xcopy是用来复制文件和目录树,下面是这个复制指令的详细解释和参数,你可以参考以后用来编写你的批处理文件。

XCOPY 源 [目标] [/A | /M] [/D[:d ate]] [/P] [/S [/E]] [/V] [/W]

[/C][/I][/Q][/F][/L][/G][/H][/R][/T][/U]

[/K][/N][/O][/X][/Y][/-Y][/Z][/B][/J]

[/排除:file1[+file2][+file3]...][/压缩]

源 指定要复制的文件。

目标 指定新文件的位置和/或名称。

/A 仅复制具有存档属性集的文件,

不更改属性。

/M 仅复制具有存档属性集的文件,

关闭存档属性。

/D:m-d-y 复制在指定日期或之后更改的文件。

如果未给定日期,则仅复制那些

源时间比目标时间新的文件。

/排除:file1[+file2][+file3]...

指定包含字符串的文件列表。 每个字符串

应位于文件的单独行中。 当任意

字符串与要复制的文件的绝对路径的任意部分

匹配时,将从复制中排除该文件。 例

如,指定 \obj\ 或 .obj 等字符串将排除

目录 obj 下的所有文件或所有具有

.obj 扩展名的文件。

/P 创建每个目标文件之前会提示你。

/S 复制除空目录和空子目录之外的目录和子目录。

/E 复制毁冲目录和子目录,包括空目录郑余数和空子目录。

与 /S /E 相同。可用于修改 /T。

/V 验证每个新文件的大小。

/W 提示你在复制前按键。

/C 即使出现错误也继续复制。

/I 如果目标不存在,且正在复制多个文件,

则假定目标必须为目录。

/-I 如果目标不存在,且正在复制单个指定文件,

则假定目标必须为文件。

/Q 复制时不显示文件名。

/F 复制时显示完整的源文件名和目标文件名。

/L 显示要复制的文件。

/G 允许将加密文件复制到

不支持加密的目标。

/H 同时复制隐藏文件和系统文件。

/R 覆盖只读文件。

/T 创建目录结构,但不复制文件。不

包括空目录或空子目录。/T /E 包括

空目录和空子目录。

/U 仅复制已存在于目标中的文件。

/K 复制属性。普通 Xcopy 将重置只读属性。

/N 使用生成的短名称进行复制。

/O 复制文件所有权和 ACL 信息。

/X 复制文件审核设置(表示 /O)。

/Y 取消提示以确认要覆盖

现有目标文件。

/-Y 导致提示以确认要覆盖

现有目标文件。

/Z 在可重启模式下复制网络文件。

/B 复制符号链接本身与链接目标。

/J 使用未缓冲的 I/O 进行复制。建议用于非常大的文件。

/压缩 文件传输期间请求网络压缩(如果

适用)。

/稀疏 在复制稀疏文件喊首时保留稀疏状态。

可以在 COPYCMD 环境变量中预设开关 /Y。

这可能在命令行上被替代为 /-Y。

一、rsync简介

用于替代rcp的一个工具,rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时rsync

server会开一渗尺猛个873端口,等待客户端去连接,连接时,rsync

server会检查口令是否相符,若通过口令查核,则可以通过进行文件传输,第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份;

二、rsync常用参数

-v,--verbose 详细模式输出;

-a,--archive 归档模式,表示以递归的方式传输文件,并保持所有文件属性不变,相当于使用了组合参数-rlptgoD

-r, --recursive 对子目录以递归模式处理

-l, --links 保留软链结

-p, --perms 保持文件权限

-t, --times 保持文件时间信息

-g, --group 保持文件属组信息

-o, --owner 保持文件属主信息

-D, --devices 保持设备文件信息

-H, --hard-links 保留硬链结

-S, --sparse 对稀疏文件进行特殊处理以节省DST的 空间

--delete 删除那些DST中SRC没有的文件

-z, --compress 对备份的文件在传输时进行压缩处理;

三、rsync的六种不同的工作模式;

1)拷贝本地文件;

当SRC和DES路径信息中不包含冒号":"分隔符时,就启用这种工作模式:

[root@cmmailapp1 /]# rsync -avSH /home/coremail/ /cmbak/

2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器,当DST路径地址包括冒号":"分隔符时启动该模式;

[root@cmmailapp1 /]# rsync -avSH /home/coremail/ 192.168.11.12:/home/coremail/

3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器,当SRC地址路径包括冒号":"分隔符时启动该模式;

[root@cmmailapp2 /]# rsync -avSH 192.168.11.11:/home/coremail/ /home/coremail/

4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。

如:rsync -av root@172.16.78.192::www /databack

5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。

如:rsync -av /databack root@172.16.78.192::www

6)列远程机的文件列表。这类似于rsync传输,不过困备只要在命令中省略掉本地机信息即可。

如:rsync -v rsync://192.168.11.11/data

四、rsync服务端的配置丛桥;

环境:192.168.11.11为生产机;192.168.11.12为备份机;

那么需要192.168.11.11需要作为rsync的client;

192.168.11.12作为rsync的service端;

1、192.168.11.12_service端的配置;

1)[root@cmmailapp2 data]# touch /etc/rsyncd.conf //此文件为rsync的主配置问题,默认不存在需要手动创建;

2)定义同步的配置;

[root@cmmailapp2 data]# cat /etc/rsyncd.conf

[data]

path = /data/

auth users = coremail

uid = root

gid = root

secrets file = /etc/rsyncd.secrets

read only = no

[mysql]

Path = /home/coremail/var/mysql

auth users = coremail

uid = root

gid = root

secrets file = /etc/rsyncd.secrets

read only = no

[cmxt]

Path = /home/coremail/

auth users = coremail

uid = root

gid = root

secrets file = /etc/rsyncd.secrets

read only = no

3)定义密码文件/etc/rsyncd.secrets

[root@cmmailapp2 data]# cat /etc/rsyncd.secrets

coremail:coremail

4)启动rsync启动服务

[root@cmmailapp2 data]# cat /etc/xinetd.d/rsync

# default: off

# description: The rsync server is a good addition to an ftp server, as it \

# allows crc checksumming etc.

service rsync

{

disable = yes //需要修改为no;

socket_type = stream

wait= no

user= root

server = /usr/bin/rsync

server_args = --daemon

log_on_failure += USERID

}

[root@cmmailapp2 data]# chkconfig --level 2345 rsync on

[root@cmmailapp2 data]# chkconfig rsync on

[root@cmmailapp2 data]# chkconfig --level 2345 xinetd on

[root@cmmailapp2 data]# service xinetd restart

Stopping xinetd: [ OK ]

Starting xinetd: [ OK ]

2、192.168.11.11_client端的配置;

[root@cmmailapp1 /]# cat /etc/rsyncd.secrets

coremail

[root@cmmailapp1 /]# rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/coremail@192.168.11.12::data

[root@cmmailapp1 /]# rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/coremail@192.168.11.12::mysql

[root@cmmailapp1 /]# rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/coremail@192.168.11.12::cmxt

五、定义定时自行rsync同步,指定同步的日志所在的路径/var/log/rsync/下;

[root@cmmailapp1 log]# cat /root/rsync.sh

DATE=`date +%Y%m%d%H%M`

rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/ coremail@192.168.11.12::data>/var/log/rsync.date.$DATE

rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/ coremail@192.168.11.12::mysql>/var/log/rsync.mysql.$DATE

rsync -aSvH --password-file=/etc/rsyncd.secrets /home/coremail/ coremail@192.168.11.12::cmxt>/var/log/rsync.cmxt.$DATE

chmod u+x /root/rsync.sh

[root@cmmailapp1 log]# crontab -l

0 3 * * * /root/rsync.sh

执行时候的日子记录文件:

[root@cmmailapp1 log]# ls |grep 'rsync'

rsync.cmxt.201110180915

rsync.date.201110180915

rsync.mysql.201110180915


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12209036.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存