浅谈Go的网络编程

133 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

今天来简单介绍下网编编程方面的知识,首先介绍TCP和UDP的区别

TCP

TCP的优点

  1. 数据传输稳定可靠
  2. 传输数据之前需要建立三次握手
  3. TCP在传输数据过程中,有确认、窗口、重传、拥塞控制机制
  4. TCP在传输数据完成后,会结束连接来减少资源的损耗

TCP的缺点

  1. 运行速度慢
  2. 效率低
  3. 占用系统资源多,易被攻击,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间

TCP协议: TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网际协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数据像水流一样传输,会存在黏包问题。

TCP服务端程序的处理流程: 1.监听端口 2. 接收客户端请求建立链接 3. 创建goroutine处理请求

func main() {
    listen, err := net.Listen("tcp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println("listen failed, err:", err)
        return
    }
    conn, err := listen.Accept() // 建立连接
    if err != nil {
        fmt.Println("accept failed, err:", err)
        continue
    }
    go process(conn) // 启动一个goroutine处理连接
    
}   

TCP客户端程序的处理流程: 1.建立与服务端的连接 2.进行数据收发 3.关闭链接

func main() {
    conn, err := net.Dial("tcp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println("err :", err)
        return
    }
    defer conn.Close() // 关闭连接
    //数据发送   
}   

UDP

UDP的优点

  1. 运行速度快,UDP是一个无状态的传输协议,所以传输数据非常快,占用资源少
  2. 较安全,因为没有TCP的那些机制,UDP也会受到攻击,例如UDP Flood攻击等。

UDP的缺点

  1. 不可靠,不稳定
  2. 没有可靠的机制,遇到网络阻塞,就会容易丢包

UDP协议(User Datagram Protocol)用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时序的通信,但是UDP协议的实时性比较好,通常用于视频直播相关领域。

UDP服务器端

func main() {
    listen, err := net.ListenUDP("udp", &net.UDPAddr{
        IP:   net.IPv4(0, 0, 0, 0),
        Port: 8080,
    })
    if err != nil {
        fmt.Println("listen failed, err:", err)
        return
    }
    defer listen.Close()
}

UDP客户端

func main() {
    socket, err := net.DialUDP("udp", nil, &net.UDPAddr{
        IP:   net.IPv4(0, 0, 0, 0),
        Port: 8080,
    })
    if err != nil {
        fmt.Println("连接服务端失败,err:", err)
        return
    }
    defer socket.Close()
}

总结

今天简单的学习了Go网络编程,还有很多细节的部分,下一步需要继续深入,对于刚入门go语言的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!