上传端

send.go

package main

import (
"fmt"
"io"
"net"
"os"
)

func main() {

fmt.Println("请输入要传输的文件")
var filePath string
fmt.Scan(&filePath)
info,err := os.Stat(filePath)
if err !=nil{
fmt.Println("获取文件属性失败")
}
conn,err := net.Dial("tcp","127.0.0.1:8000")
if err !=nil{
fmt.Println("连接服务器出错")
}
defer conn.Close()
_,err = conn.Write([]byte(info.Name()))
if err!=nil{
fmt.Println("发送文件名出错")
}
buff := make([]byte,1024)
n,err:= conn.Read(buff)
if err !=nil {
fmt.Println(err)
}
str := string(buff[:n])
if "ok" !=str{
fmt.Println("接收文件错误")
}
sendFile(filePath ,conn)

}
func sendFile(filePath string,conn net.Conn) {
buff := make([]byte,1024)
fileHandle,err := os.Open(filePath)//打开文件
if err!=nil{
if err == io.EOF{
fmt.Println("发送文件完毕")
}else{
fmt.Println("打开文件失败")
}

return
}
defer fileHandle.Close() //关闭文件
n,err := fileHandle.Read(buff)//读取文件内容
if err!=nil{
fmt.Println("读取文件失败")
return
}
conn.Write(buff[:n]);
}

接收端(服务器端)recive.go

package main

import (
"fmt"
"io"
"net"
"os"
) func main() { lisener,err := net.Listen("tcp","127.0.0.1:8000")
if err !=nil{
fmt.Println("监听失败")
}
defer lisener.Close()
conn,err :=lisener.Accept()
defer conn.Close()
if err !=nil{
fmt.Println("连接失败")
}
buffer := make([]byte,1024)
n,err :=conn.Read(buffer)
if err!=nil{
fmt.Println("获取内容失败")
}
fileNme :=string(buffer[:n]) _,err = conn.Write([]byte("ok"))
if err !=nil{
fmt.Println("发送内容失败")
}
reciveFile(fileNme,conn) }
func reciveFile(filName string,conn net.Conn){
file,err := os.Create(filName)
if err!=err{
fmt.Println(err)
return
}
buff := make([]byte,1024)
for{ n,err := conn.Read(buff)
if err!=nil{
if err == io.EOF{
fmt.Println("文件接收完毕")
return
}else {
fmt.Println("读取内容失败")
}
}
if n==0{
fmt.Println("文件传输完毕")
return
}
_,err =file.Write([]byte(buff[:n]))
if err!=nil{
fmt.Println("写入文件失败")
} }
}

最新文章

  1. VirtualBox 共享文件夾
  2. 【转】cloudera新增用户权限配置
  3. magento去掉小数点后面的0
  4. ubuntu网络配置
  5. ByteArray
  6. MongoDB 学习笔记(原创)
  7. Python学习_argsparse
  8. 237. Delete Node in a Linked List(leetcode)
  9. freemarker写select组件(四)
  10. lua向文件中写入数据,进行记录
  11. underscore源码阅读
  12. 获取网页title(还有一坑未填)
  13. 【解决】Can't find default configuration "arch/x86/configs/xx_defconfig"!
  14. [WC2014]紫荆花之恋
  15. Struts2 中常用的代码
  16. tomcat顺序图摘要
  17. go-elasticsearch 来自官方的 golang es client
  18. Alpha 冲刺三
  19. 内存与cpu的关系
  20. spring4 知识点

热门文章

  1. 19 Maven---项目管理工具
  2. 解决python中的Non-UTF-8 code starting with ‘\xbs4’ in file错误
  3. 5. JDBC/ODBC服务器
  4. Luogu4705 玩游戏 分治FFT
  5. [LOJ#3119][Luogu5400][CTS2019]随机立方体(容斥+DP)
  6. Spring Cloud Alibaba学习笔记(16) - Spring Cloud Gateway 内置的路由谓词工厂
  7. Java中 StringBuffer StringBuilder String 区别
  8. NEST 字符串sort
  9. IOS 之 NSBundle 使用
  10. python 笔记一