[GO]文件的收发服务器
发送方
package main import (
"fmt"
"os"
"net"
"io"
)
//发送文件内容
func SendFile(path string, conn net.Conn) {
//以只读方式打开文件
f, err := os.Open(path)
if err != nil {
fmt.Println("open file err = ", err)
return
}
defer f.Close()
//核心功能,读多少就发送多少
buf := make([]byte, )
for true {
n , err := f.Read(buf)
if err != nil {
if err == io.EOF {
fmt.Println("文件发送完毕")
return
}else {
fmt.Println("f.read err = ", err)
return
}
}
//给服务器发送内容
conn.Write(buf[:n])
}
} func main() {
//提示输入文件
fmt.Println("请输入需要传输的文件:")
var path string
fmt.Scan(&path) //获取文件名
info, err := os.Stat(path)
if err != nil {
fmt.Print("获取文件名err = ", err)
return
}
//文件连接服务器
conn, err1 := net.Dial("tcp", ":8000")
if err1 != nil {
fmt.Println("net.Dial err = ", err1)
return
} defer conn.Close() //给接收方发送文件名
_, err = conn.Write([]byte(info.Name()))
if err != nil {
fmt.Println("conn.Write err = ", err)
return
}
buf := make([]byte, )
n, err := conn.Read([]byte(buf))
if err != nil {
fmt.Println("conn.Read err = ", err)
}
if "ok" == string(buf[:n]) {
fmt.Println("开始发送文件了")
//发送文件
SendFile(path, conn)
}
}
接收方
package main import (
"net"
"fmt"
"os"
"io"
) //接收文件内容
func RecvFile(fileName string, conn net.Conn) {
//新建一个文件
f, err := os.Create(fileName)
if err != nil {
fmt.Println("os.Create err = ", err)
return
}
buf := make([]byte, *)
for true {
n, err := conn.Read(buf) //接收对方发过来的文件内容
if err != nil {
if err == io.EOF {
fmt.Println("文件接收完毕")
}else {
fmt.Println("f.read err = ", err)
return
}
}
f.Write(buf[:n])
}
} func main() {
//监听
listener, err := net.Listen("tcp", ":8000")
if err != nil {
fmt.Println("net.Listen err = ", err)
return
} defer listener.Close() conn, err := listener.Accept()
if err != nil {
fmt.Println("listener.Accept err = ", err)
return
}
//读取文件名
buf := make([]byte, )
var n int
n, err = conn.Read(buf)
if err != nil {
fmt.Println("conn read err = " ,err)
return
}
fileName :=string(buf[:n])
//回复OK
conn.Write([]byte("ok")) //接收文件内容
RecvFile(fileName, conn)
}
先开始发送方的服务后再开始接收方,在发送方输入发送的文件名

[GO]文件的收发服务器的更多相关文章
- 详解:基于WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器功能
文件同步传输工具比较多,传输的方式也比较多,比如:FTP.共享.HTTP等,我这里要讲的就是基于HTTP协议的WEB API实现批量文件由一个服务器同步快速传输到其它多个服务器这样的一个工具(简称:一 ...
- 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器
引入: 在我们昨天架设好了Samba服务器上并且创建了一个 Samba 账户后,我们就迫不及待的想用JAVA去操作Samba服务器了,我们找到了一个框架叫 jcifs,可以高效的完成我们工作. 实践: ...
- 使用CURL下载远程文件保存到服务器
比如微信公众平台开发,下载用户的头像到服务器上: /** * 使用CURL获取远程文件保存到服务器 *@param $image=$oJSON->headimgurl; 获取到的微信返回的头像U ...
- C# 上传文件至远程服务器
C# 上传文件至远程服务器(适用于桌面程序及web程序) 2009-12-30 19:21:28| 分类: C#|举报|字号 订阅 最近几天在玩桌面程序,在这里跟大家共享下如何将本地文件上传 ...
- Javaweb向服务器上传文件以及从服务器下载文件的方法
先导入jar包 点击下载 commons-fileupload是Apache开发的一款专门用来处理上传的工具,它的作用就是可以从request对象中解析出,用户发送的请求参数和上传文件的流. comm ...
- MacOS 系统终端上传文件到 linux 服务器
使用scp: scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速 ...
- ASP.NET上传文件到远程服务器(HttpWebRequest)
/// <summary> /// 文件上传至远程服务器 /// </summary> /// <param name="url">远程服务地址 ...
- windows上python上传下载文件到linux服务器指定路径【转】
从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...
- Foxpro数据库连接错误解决方法--【VFP DBF文件不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器】
直接访问vfp dbf文件时报错: 错误描述: 'd:\vfpData\test.dbf'不是一个有效的路径. 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器. 解决办法:Data Sour ...
随机推荐
- py基础2--列表,元祖,字典,集合,文件
本节内容 列表.元祖操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 三元运算&生成式&成员运算&解压法&队列堆栈&数据类型转换 1. 列表操作 ...
- Autofac ASP.NET Web API (Beta) Integration
With the beta release of ASP.NET MVC 4 and the ASP.NET Web API being released a few weeks ago, I dec ...
- Windows远程桌面连接CentOS 7
1. 安装tigervnc-server yum install tigervnc-server 2. 设置vncserver服务器 将默认提供的文件复制到/etc/systemd/system,命令 ...
- oracke创建db link
-- Create database link create public database link test_link connect to 用户名 identified by 密码 using ...
- 转 Quartz将Job持久化所需表的说明
QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息 QRTZ_CRON_TRIGGERS 存储 Cron Trigger,包括 Cron表达式和时区信息 ...
- SQLite的基本用法
SQLite是Android自带的轻量级数据库,接口封装的很好,不会SQL的也能很好的使用. 接下来讲一下怎么创建数据库.通过adb查看数据表和数据.增删查改. 一.创建数据库 Android封装了S ...
- 微信小程序中this关键字使用技巧
转自:https://blog.csdn.net/qq_33956478/article/details/81348453 微信小程序中,在wx.request({});方法调用成功或者失败之后,有时 ...
- Spring cloud Eureka高可用 - Windows 7 hosts文件立即生效
hosts 文件所在位置 c:/windows/system32/drivers/etc/hosts 左下角 搜索框 搜索 cmd 弹出命令框 输入 ipconfig /displaydns 显示所有 ...
- aop编程术语
- 工具类: 用于模拟HTTP请求中GET/POST方式
package com.jarvis.base.util; import java.io.BufferedReader; import java.io.IOException; import java ...