go语言实现的目录共享程序

wolfred7464 · · 2247 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

其实程序很小,只不过是想写点东西了。
后天晚上要回学校考试了,转眼已经出来了69天了,2个月多一点。
工资加上老妈赞助的钱,不知道能不能买台电脑,作为程序员一直用着i3-3217u实在难受。
回去找同学拷点片,再拷点游戏,好了,绕到正题了。
拷游戏免不了拷贝目录,最简单的办法当然是用U盘,可是U盘只有16G,一次不一定能装下一个游戏,而且我的劣质U盘写入速度只有3M多,显然不好折腾。
还一个办法是利用windows的共享文件夹功能,但是我试过几次速度都慢的要死,不知道为什么,所以对这种方式也并没有太多幻想。
还一个办法是ftp,但是同学的电脑上一般没有ftp服务,总不能挨个安装。
所以在百无聊赖之中,我就写了这么一个小东西,利用go语言静态编译的特点,编译之后放在网盘,用的时候随时下载,直接就可以执行,不需要安装各种软件和配置各种环境,比较绿色。另外也方便我自己在各种虚拟机之间共享文件了。
程序思路很简单,就是发送者遍历要发送的目录,依次发送每一个文件就可以。接收方要复杂一些,因为要处理断包和粘包的问题,还要知道每个文件的边界,还要保持与发送者相同的相对目录结构。
我的处理方法就是,每个文件发送前先发送一个json数据,用来描述接下来要发送的文件的相对路径、文件名、文件大小,这样就可以处理目录结构问题和边界问题了。但是这样又需要确定json数据的边界,所以发送json前先发送json数据的长度,是不是还要知道描述长度的数据的边界?当然,不过长度统一用uint32表示,也就是固定4个字节就OK了。
接收数据的时候需要谨慎处理,json的长度数据、json内容都会有断包和粘包的问题,需要仔细确定。
代码放在github了,地址是:
https://github.com/Anti-Magic/share_sender
https://github.com/Anti-Magic/share_receiver

另外,如果只是共享几个文件,还可以利用http下载的方式,但是不适合批量下载大量文件。
再贴一下http下载的代码:

1 package main
2 
3 import "http"
4 
5 func main(){
6     h := http.FileServer(http.Dir("."))
7     http.ListenAndServe(":7000", h)    
8 }

 


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:wolfred7464

查看原文:go语言实现的目录共享程序

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

2247 次点击  
加入收藏 微博
上一篇:google镜像
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传