前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >tcp之间传输文件go实现

tcp之间传输文件go实现

作者头像
Laikee
发布于 2022-04-25 06:21:30
发布于 2022-04-25 06:21:30
50000
代码可运行
举报
文章被收录于专栏:Laikee Tech SpaceLaikee Tech Space
运行总次数:0
代码可运行

服务端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)


    }
}

客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,那么开启一个连接,发送文件
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Golang之Socket
go创建socket很简单 package main import ( "fmt" "net" ) func main() { //服务器监听地址 fmt.Println("start server...") listen, err := net.Listen("tcp", "127.0.0.1:50000") if err != nil { fmt.Println("listen failed,err:", err) re
超蛋lhy
2018/08/31
1.1K0
Golang之Socket
用golang完成tcp协议传输
之前有用python写过tcp的C/S,今天用golang完成同样的操作,分别写了客户端和服务端 客户端:
gzq大数据
2021/05/06
6870
手把手教你用go语言实现聊天室
手撕代码八百里
2024/01/10
4000
go实现tcp网络编程
本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn
仙士可
2022/01/20
5160
go实现tcp网络编程
Go Web---tcp服务器
这部分我们将使用 TCP 协议和之前讲到的协程范式编写一个简单的客户端-服务器应用,一个(web)服务器应用需要响应众多客户端的并发请求:Go 会为每一个客户端产生一个协程用来处理请求。我们需要使用 net 包中网络通信的功能。它包含了处理 TCP/IP 以及 UDP 协议、域名解析等方法。
大忽悠爱学习
2022/08/23
1.7K0
Go Web---tcp服务器
net.Dial与net.Listen
net.Listen能够监听本地端口,接收特定协议建立的连接,如果成功接收,则返回一个Listener接口
TomatoCool
2023/07/31
7390
Go语言实现TCP服务端和客户端
TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数据像水流一样传输,会存在黏包问题。
ccf19881030
2020/10/28
10.6K0
Go语言实现TCP服务端和客户端
53. Socket服务三次握手的示例 | 厚土Go学习笔记
什么是三次握手呢?这是服务器和客户端之间沟通的过程。 首先,客户端对服务器发送了条信息。 然后,服务端对客户端说,我收到了。 最后,客户端对服务端说,好的,我知道你收到了。 怎么样?这就是三次握手。哈哈! 服务端,我们先声明本地要监听的地址和端口。 netListent, err := net.Listen("tcp", "localhost:7373") 有开始就有结束,当主函数运行结束时,需要释放资源。 defer netListent.Close() 在服务端做标记,表明现在开始等待客户端访问了。
李海彬
2018/03/19
1.5K0
一篇文章带你了解Go语言基础之网络编程
多台机器要实现互相通讯,其实是一个非常复杂的过程,底层从铺设网线,网线接口,交换机,路由器,在到规定各种协议。
Go进阶者
2021/01/22
4740
(四十六)golang--网络编程(简易的聊天系统)
Go主要的目标之一就是面向大规模后端服务程序,网络通信这块是服务端程序必不可少也是至关键的一部分。
西西嘛呦
2020/08/26
6870
详说tcp粘包和半包
tcp服务端和客户端建立连接后会长时间维持这个连接,用于互相传递数据,tcp是以流的方式传输数据的,就像一个水管里的水一样,从一头不断的流向另一头。
lpxxn
2020/06/18
6670
详说tcp粘包和半包
go语言TCP编程入门
服务端 服务端的处理流程 监听端口8888 接收客户端的tcp连接 创建gorountine,处理该链接的请求(通常客户端会通过链接发送请求包) 客户端 客户端的处理流程 建立与服务端的链接 发送请求
程序员小饭
2020/09/07
1.7K0
TCP、UDP协议和Socket编程
在网络编程中,TCP 和 UDP 是两种最常用的协议。Golang 提供了丰富的标准库和第三方包来支持这两种协议以及 Socket 编程。本文将深入探讨 Golang 中 TCP、UDP 协议和 Socket 编程的实现方式,并提供完整的代码示例。
用户1413827
2023/11/28
2440
Go-标准库-net(一)
net是Go语言中用于网络编程的标准库。它提供了一系列的函数和类型,用于创建网络连接、传输数据、处理网络协议等。在本文中,我们将详细介绍net包,并给出一些示例代码。
堕落飞鸟
2023/04/21
5380
高并发C/S的TCP版本golang实现
前面一篇文章写到的实现服务器只能连接一个客户端,没有发挥出go语言的协程特性,所以又可用如下方法实现高并发,多个客户端连接来完成:
gzq大数据
2021/05/06
1.4K0
Go语言的变量、函数、Socks5代理服务器
Go语言中变量的声明和JavaScript很像,使用var关键字,变量的声明、定义有好几种形式 
阳光岛主
2019/02/18
6400
Golang语言 Socket
1. Socket 简介 常用的 Socket 类型有两种:流式 Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。 流式是一种面向连接的 Socket,针对于面向连接的 TCP 服务应用; 数据报式 Socket 是一种无连接的 Socket,对应于无连接的 UDP 服务应用 2. 网络中的进程之间如何通过 Socket 通信呢? 网络层的“ip 地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用 三元组(ip 地址,
李海彬
2018/03/21
7710
腾讯一面:TCP的黏包怎么解决?
当多个逻辑上的数据包被封装在一个TCP数据包中进行传输时,接收端可能会一次性接收到多个数据包的内容,或者将多个逻辑上的数据包拆分成多个TCP数据包进行接收,这就是所谓的TCP粘包现象。
千羽
2024/02/21
2240
腾讯一面:TCP的黏包怎么解决?
Go 语言使用 net 包实现 Socket 网络编程
友情提示:此篇文章大约需要阅读 10分钟12秒,不足之处请多指教,感谢你的阅读。订阅本站
Meng小羽
2020/05/26
1.6K0
Go 语言使用 net 包实现 Socket 网络编程
GO网络编程分享
每一层有每一层的独立功能,大多数网络都采用分层的体系结构,每一层都建立在它的下层之上,向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。
阿兵云原生
2023/02/16
3390
相关推荐
Golang之Socket
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文