go 文件传输服务器,tcp之间传输文件go实现

服务端

package main

import (

"io"

"os"

"net"

"fmt"

)

func revFile (fileName string, conn net.Conn) {

defer conn.Close()

fs,err := os.Create(fileName)

defer fs.Close()

if err != nil {

fmt.Println("os.Create err =",err)

return

}

// 拿到数据

buf := make([]byte ,1024*10)

for {

n,err := conn.Read(buf)

if err != nil {

fmt.Println("conn.Read err =",err)

if err == io.EOF {

fmt.Println("文件结束了",err)

}

return

}

if n == 0 {

fmt.Println("文件结束了",err)

return

}

fs.Write(buf[:n])

}

}

func main ( ) {

// 创建一个服务器

Server,err := net.Listen("tcp","192.168.1.11:8000")

if err != nil {

fmt.Println("net.Listen err =",err)

return

}

defer Server.Close()

// 接受文件名

for {

conn, err := Server.Accept()

defer conn.Close()

if err != nil {

fmt.Println("Server.Accept err =",err)

return

}

buf := make([]byte ,1024)

n,err1 := conn.Read(buf)

if err1 != nil {

fmt.Println("conn.Read err =", err1)

return

}

// 拿到了文件的名字

fileName := string(buf[:n])

// 返回ok

conn.Write([]byte ("ok"))

// 接收文件,

revFile(fileName,conn)

}

}

客户端

package main

import (

"net"

"fmt"

"os"

)

func sendFile (path string,conn net.Conn) {

defer conn.Close()

fs,err := os.Open(path)

defer fs.Close()

if err != nil {

fmt.Println("os.Open err = ", err)

return

}

buf := make([]byte,1024*10)

for{

// 打开之后读取文件

n, err1:= fs.Read(buf)

if err1 != nil {

fmt.Println("fs.Open err = ", err1)

return

}

// 发送文件

conn.Write(buf[:n])

}

}

func main ( ) {

for {

fmt.Println("请输入一个全路径的文件,比如,D:\\a.jpg")

// 获取命令行参数

var path string

fmt.Scan(&path)

// 获取文件名,

info,err := os.Stat(path);

if err != nil {

fmt.Println("os.Stat err = ",err)

return

}

// 发送文件名

conn, err1 := net.Dial("tcp","192.168.1.11:8000")

defer conn.Close()

if err1 != nil {

fmt.Println("net.Dial err = ",err1)

return

}

conn.Write([]byte (info.Name()))

// 接受到是不是ok

buf := make([]byte,1024)

n , err2 := conn.Read(buf)

if err2 != nil {

fmt.Println("conn.Read err = ",err2)

return

}

if "ok" == string(buf[:n]) {

fmt.Println("成功");

sendFile(path,conn)

}

// 如果是ok,那么开启一个连接,发送文件

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值