获取文件信息需要用到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的更多相关文章

  1. golang 文件传输小demo(转载)

    转载地址:https://www.cnblogs.com/qq702368956/p/10195497.html 获取文件信息需要用到os. Stat接口,发送文件前开启接收者(服务端),启动客户端先 ...

  2. c# 局域网文件传输实例

    一个基于c#的点对点局域网文件传输小案例,运行效果截图 //界面窗体 using System;using System.Collections.Generic;using System.Compon ...

  3. go bigfile (文件传输管理系统)前端分片上传demo

    BIGFILE Github地址: https://github.com/bigfile/bigfile 欢迎大家前来issue & star BIGFILE 中文文档地址:https://l ...

  4. 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 ...

  5. golang文件传输服务

    续上篇,本篇介绍一个完整的golang文件传输服务器. 完整的代码可以看服务器,客户端 网络使用的框架如上篇介绍,这里就不再复述. 首先定义3个命令码: const ( request_file = ...

  6. 在linux系统上文件传输的小技巧

    各位做运维的小伙伴,你是不是常常在为文件传到linux服务器上感到头疼呢,我们知道常用的文件传输工具有好多,比如xftp,winscp等,但是有没有比这更简单的呢?当然是有的呢,下面给大家介绍下: y ...

  7. linux几种文件传输方式

    本文记录linux系统中文件传输的多种方式,留作备忘.linux中文件传输的方式有ftp,scp,rsync,rz,sz等,但各个工具的功能又有所区别: FTP : FTP是文件服务器,可实现文件的上 ...

  8. RPC框架学习+小Demo实例

    一.什么是RPC协议? 全称:远程过程调度协议 效果:使消费者向调用本地方法一样调用远程服务方法,对使用者透明 目前常用:Dubbo.Thirft.Sofa.... 功能: 建立远程通信(socket ...

  9. Windows&Linux文件传输方式总结

    在渗透过程中,通常会需要向目标主机传送一些文件,来达到权限提升.权限维持等目的,本篇文章主要介绍一些windows和Linux下常用的文件传输方式. Windows 利用FTP协议上传 在本地或者VP ...

随机推荐

  1. 思科模拟器PacketTracer7--利用一台交换机和2台pc互连构成小型局域网

    实验二—2 实验工具:思科模拟器PacketTracer7(可在思科官网下载,免费) 实验设备: 交换机一台,PC两台,直连线或选择自动匹配 实验步骤: 一.配置网络拓扑图 连线可选择连通线或闪电符号 ...

  2. Lucene配置环境变量

    更详细的内容请参考:http://www.cnblogs.com/itcsl/p/6804954.html 以下是参照上面的操作方式来说明的,首先下载lucene-6.2.1.zip文件,这个网上有的 ...

  3. 查看当前Jquery版本

    <script type="text/javascript"> $(document).ready(function(){ alert(jQuery.fn.jquery ...

  4. composer常用的一些命令\参数\说明

    安装 curl -sS https://getcomposer.org/installer | php 或者 php -r "readfile('https://getcomposer.or ...

  5. js生成二维码 qrcode

    js生成二维码 QRcode npm 地址 1.安装qrcode //在项目文件夹中执行: npm install --save qrcode //或者,将其全局安装以使用qrcode命令行来保存qr ...

  6. css--nth-child的注意点

    nth-child( n ) 里面的n可以是任何整数值. 不过要取第一位开始的元素DOM对象,那么n是从1开始的 如果n值小于0或者等于0,是不会匹配任何元素,(或者超过数量)切记切记!!!! 例子: ...

  7. spring MVC 入门:

    概述: MVC: M model 模型,除控制和视图以外,都可以成为模型. V view 视图,JSP,HTML,ASP,PHP,XHTML,FREEMARK,JSF,直接与用户做交互的资源. C c ...

  8. h5或者微信端吊起app

    [https://www.cnblogs.com/shadajin/p/5724117.html]! 魔窗sdk http://www.magicwindow.cn/doc/universal-lin ...

  9. 修改create-react-app支持多入口

    使用Facebook官方脚手架create-react-app创建React应用,默认只能生成一个SPA,入口是index.html.虽然,SPA的页面切换可以使用前台路由框架方便(比如React-R ...

  10. Java——值传递与引用传递

    1.基本类型和引用类型在内存中的保存 (1)基本类型的变量保存原始值,即它代表的值就是数值本身:   基本类型在声明变量时就为它分配了空间:   基本类型在参数传递过程中属于值传递,也就是复制一份数据 ...