golang 实现文件传输小demo
获取文件信息需要用到os. Stat接口,发送文件前开启接收者(服务端),启动客户端先发送文件名给接收者,接收者收到文件名返回确认信息"ok",才读取本地文件 发送给接收者。
发送者:
package main import (
"fmt"
"io"
"net"
"os"
) func main() {
fmt.Println("请输入接收者地址(IP:PORT):")
var addr string
fmt.Scan(&addr)
fmt.Println("请输入需要传输的文件:")
var path string
fmt.Scan(&path)
info, errf := os.Stat(path)
if errf != nil{
fmt.Println("os.Stat errf =", errf)
return
} conn, err := net.Dial("tcp", addr)
if err != nil{
fmt.Println("net.Dial err =",err)
return
}
defer conn.Close() _, err = conn.Write([]byte(info.Name()))
if err != nil{
fmt.Println("conn.Write info.Name err =",err)
return
}
var n int
buf := make([]byte, )
n, err = conn.Read(buf)
if err != nil{
fmt.Println("conn.Read ok err =", err)
return
}
if "ok" == string(buf[:n]){
fmt.Println("ok")
SendFile(path, conn)
}
} func SendFile(path string, conn net.Conn){
file , err := os.Open(path) if err != nil{
fmt.Println("os.Open err =", err)
return
}
defer file.Close()
buf := make([]byte, * ) for {
n, err := file.Read(buf)
if err != nil{
if err == io.EOF{
fmt.Println("文件发送完毕")
} else{
fmt.Println("file.Read err =",err)
} return
}
if n == {
fmt.Println("文件发送完毕")
break
}
conn.Write(buf[:n])
}
}
接收者:
package main import (
"fmt"
"io"
"net"
"os"
) func main() {
fmt.Println("请你的地址(IP:PORT):")
var addr string
fmt.Scan(&addr)
listenner, err := net.Listen("tcp", addr)
if err != nil{
fmt.Println("net.Listen err =", err)
return
}
defer listenner.Close() conn, errl := listenner.Accept()
if errl != nil{
fmt.Println("listenner.Accept err =", errl)
return
}
var n int
buf := make([]byte, )
n, err = conn.Read(buf)
if err != nil{
fmt.Println("conn.Read fileName err =", err)
return
}
fileName := string(buf[:n])
n, err = conn.Write([]byte("ok"))
if err != nil{
fmt.Println("conn.Write ok err =", err)
return
} RecvFile(fileName, conn)
} func RecvFile(fileName string, conn net.Conn){
file , err := os.Create(fileName)
if err != nil{
fmt.Println("os.Create err =", err)
return
} defer file.Close() buf := make([]byte, * )
for{
n, err := conn.Read(buf)
if err != nil{
if err == io.EOF{
fmt.Println("文件接收完成")
} else {
fmt.Println("conn.Read err =", err)
}
return
} n, err = file.Write(buf[:n])
if err != nil{
fmt.Println("file.Write err =", err)
break
}
}
}
golang 实现文件传输小demo的更多相关文章
- golang 文件传输小demo(转载)
转载地址:https://www.cnblogs.com/qq702368956/p/10195497.html 获取文件信息需要用到os. Stat接口,发送文件前开启接收者(服务端),启动客户端先 ...
- c# 局域网文件传输实例
一个基于c#的点对点局域网文件传输小案例,运行效果截图 //界面窗体 using System;using System.Collections.Generic;using System.Compon ...
- go bigfile (文件传输管理系统)前端分片上传demo
BIGFILE Github地址: https://github.com/bigfile/bigfile 欢迎大家前来issue & star BIGFILE 中文文档地址:https://l ...
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer Advanced Installer :Free for 30 da ...
- golang文件传输服务
续上篇,本篇介绍一个完整的golang文件传输服务器. 完整的代码可以看服务器,客户端 网络使用的框架如上篇介绍,这里就不再复述. 首先定义3个命令码: const ( request_file = ...
- 在linux系统上文件传输的小技巧
各位做运维的小伙伴,你是不是常常在为文件传到linux服务器上感到头疼呢,我们知道常用的文件传输工具有好多,比如xftp,winscp等,但是有没有比这更简单的呢?当然是有的呢,下面给大家介绍下: y ...
- linux几种文件传输方式
本文记录linux系统中文件传输的多种方式,留作备忘.linux中文件传输的方式有ftp,scp,rsync,rz,sz等,但各个工具的功能又有所区别: FTP : FTP是文件服务器,可实现文件的上 ...
- RPC框架学习+小Demo实例
一.什么是RPC协议? 全称:远程过程调度协议 效果:使消费者向调用本地方法一样调用远程服务方法,对使用者透明 目前常用:Dubbo.Thirft.Sofa.... 功能: 建立远程通信(socket ...
- Windows&Linux文件传输方式总结
在渗透过程中,通常会需要向目标主机传送一些文件,来达到权限提升.权限维持等目的,本篇文章主要介绍一些windows和Linux下常用的文件传输方式. Windows 利用FTP协议上传 在本地或者VP ...
随机推荐
- 弹筐里同一个按钮判断是从哪里点击过来的form
点击弹框按钮 <form action="javascript:;" method="post"> <button type= ...
- linux基础命令连接命令ln
ln -s /etc/issue /tmp/issue.soft 创建文件/etc/issue 的软连接/tmp/issue.soft 不带-s 生成硬链接文件. 软连接类似于windows的 ...
- Envoy 源码分析--network
目录 Envoy 源码分析--network address Instance DNS cidr socket Option Socket ListenSocket ConnectionSocket ...
- Linux中一个快速查找文件和目录的命令
功能介绍: locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,值得注意的是:版本不同,会有所不 ...
- 使用jsdelivr访问github资源
一.新建github库并使用git上传 首先访问https://github.com 新建自己的库 之后使用 git 上传到github 下载git : https://git-for-windows ...
- Table 类(数据表基类)
只修改数据表某条记录的部分字段(究极进化): public class TableHelper { private Dictionary<string, object> temp; pub ...
- OneNote无法打开链接出现错误:你的组织策略阻止我们为你完成此操作
首先打开注册表编辑器,按键盘win+r,调出运行窗口,输入regedit打开注册表编辑器 打开HKEY_CURRENT_USER\Software 打开\Classes 最后选中.html,在默认选项 ...
- idea 的一些基本的配置
1. 2. 3. http://139.199.89.239:1008/88414687-3b91-4286-89ba-2dc813b107ce 531403098@qq.com R+0oOAb3rx ...
- hive的排序,分組练习
hive的排序,分組练习 数据: 添加表和插入数据(数据在Linux本地中) create table if not exists tab1( IP string, SOURCE string, TY ...
- 浏览器与WEB服务器交互
问题:打开浏览器,在地址栏输入url到页面展现,整个过程发生了什么? 图示: 步骤: 1 用户输入网址,包括协议和域名. 2 浏览器先查找自身缓存有没有记录,没有的话再找操作系统缓存. 3 当浏览器在 ...