局域网内快速传文件的一个方法

局域网内传文件的瓶颈往往不在网卡或者路由的速度,而在于文件传输方式(sftp, samba, etc)本身需要占用较高的CPU。

UNIX系统自带了一个非常简单的工具,叫做netcat. 你基本上可以说它就是一个socket()的最简单的命令行实现。使用这个命令可以建立一个非常简单的文件传输通道,几乎省却了所有的有关文件加密,处理的环节。在最快的局域网,用它有时能比基于SSH的sftp/rsync快一倍。

使用方法:1. 在传文件的电脑(SERVER)上跑:
tar -c filedir/subdir/ | nc -l 1234
2. 在收文件的电脑(client)上跑:
nc SERVER 1234 | tar x

解释一下。第一个命令在SERVER上建立了一个port number为1234的socket通道,通道里面是打包命令tar -c 从管道里传过来的filedir/subdir/下的所有文件。第二个命令在CLIENT上接受SERVER port 1234号socket,并把接收到的内容通过管道交给打包命令tar x来解包。这两条命令虽然不如直接用在CLIENT上rsync来得简单,但效率确实高了不少。

这个实例也算是一个最简单的UNIX socket编程吧?Windows下貌似没有socket这么方便的东西,想要网络编程似乎没有在UNIX下简洁方便。

, ,

  1. 发表评论

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: