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

其实程序很小,只不过是想写点东西了。
后天晚上要回学校考试了,转眼已经出来了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 }
时间: 2024-10-03 14:55:43

go语言实现的目录共享程序的相关文章

[程序设计语言]-摘记&注解-目录

这篇博文干嘛的 前一周写了一篇博文“记-码农的“启蒙”之<程序设计语言-实践之路>和<面向对象分析和设计>两书”,其中说打算总结下这两本书中有哪些收获,这个系列文章呢,就是关于第一本书<程序设计语言-实践之路>的. 这本书能带来什么 首先这是一本介绍语言的入门书籍(笔者阅读是裘宗燕老先生翻译的第二版),如果你想从中学到一些独门绝技,那么抱歉,木有. 其次它介绍的是程序设计语言的一些重要基础概念.各种概念之间的关系:并解释了语言中诸多结构的形成和发展过程,以及他们演化到今

go语言实现遍历目录,及查找特定的文件类型

1 // filelist.go 2 package main 3 4 import ( 5 //"flag" 6 "fmt" 7 "os" 8 "path/filepath" 9 "strings" 10 ) 11 12 var ( 13 ostype = os.Getenv("GOOS") // 获取系统类型 14 ) 15 16 var listfile []string //获取

R 语言解压目录下的所有gz文件

setwd("GSE29431_RAW") # 进入目录 fileNames <- list.files() # 获取目录下的所有文件 sapply(fileNames, gunzip) # 进行解压操作,fileNames是一个向量,gunzip是解压缩的函数,sapply()会依次将fileNames中的元素应用gunzip函数 原文地址:https://www.cnblogs.com/0820LL/p/11651288.html

R语言 重命名目录下所有文件

myfilepath <- "F:/paper2/climateExposure/wjj_mec/second/paths/" setwd(myfilepath) alltypefiles = dir(myfilepath) newname = gsub(pattern = 'paths.',replacement = 'paths_',x = alltypefiles) file.rename(alltypefiles,newname) 原文地址:https://www.cnb

C语言提高内容目录

(1)基础 数据类型和变量 内存四区(栈 堆 全局 代码区) (2)指针和字符串操作 指针强化 字符串的基本操作 字符串一级指针内存模型图 字符串做为函数参数 (3)二级指针多级指针 二级指针的输入输出模型 二级指针输入的三种内存模型 多级指针的使用 (4)数组 一维数组  二维数组 数组类型  数组指针类型 数组指针类型变量 多维数组 (5)结构体 结构体的使用 (6)文件操作 文件读写操作 配置文件的读写案例(自定义接口) 文件的加密和解密案例(使用别写好的接口) (7)进阶知识 预处理 如

C 语言博客目录

编译 GCC编译的几个步骤 gcc产生类型转换告警 枚举之后define 变量(指针) 二级指针(二) 操作符 语句 函数 关键字 c中extern的作用 示例code积累 ipv6地址累加函数 常见错误汇总 a label can only be part of statement and a declaratioin is not a statement 原文地址:https://www.cnblogs.com/rivsidn/p/10979371.html

C#语言规范目录

C#语言规范学习 目录: 介绍 词法结构 基本概念 类型 变量 转换 表达式 语句 命名空间 类 结构 数组 接口 枚举 委托 异常 特性 不安全代码 原文地址:https://www.cnblogs.com/magicinsist/p/12496876.html

Go语言学习笔记(一) : 搭建Windows下的Go开发环境

最近突然对Go语言产生了兴趣,主要是因为在使用python的时候遇到了一些不爽的问题,然后发现了Go.Go是Google出的一个动态语言,语法和C++接近,性能也非常的好,而且还支持编译成exe发布,并且不依赖任何虚拟机(其实是打包在exe里面了),这种好语言怎么能够错过?所以便一时兴起,开始学习了起来.由于本人还处于异常小白的阶段,所以文章中可能不免有些错误,欢迎大家各种指正. 安装Go 前往Go语言的官方网站:http://golang.org/, 下载对应平台的安装包.如果是x86的系统可

Go语言基础知识学习笔记1

安装教程我就不写了,推荐大家下载msc的安装包,因为他会自动帮你配置一些环境变量,但是GOPATH这个工作目录的环境变量需要自己配置 右键我的电脑->属性->高级系统设置->环境变量->新建系统变量 变量名称大写 GOPATH 路径就你的工作目录,如我的是D:/go 如果有多个工作目录就使用";"分号分割 根据约定,GOPATH下需要建立3个目录: bin (存放编译后生成的可执行文件)pkg (存放编译后生成的包文件)src (存放项目源码) 查看环境变量与工