Golang 网络编程socket+tcp+udp

Part 26 - 网络编程

网络编程分类

  • 基于 TCP/IP 的 Socket编程
  • 基于 HTTP 的 HTTP 编程

端口

  • 0是保留端口
  • 1-1024是知名端口
    • 21:ftp
    • 22:ssh
    • 23:telnet
    • 24:smtp
    • 80:http
  • 1025-65535是动态端口

Socket 的使用流程

  • 服务端

    • 监听端口
    • 接收客户端发送的 tcp 连接,建立与客户端的 tcp 连接
    • 创建 goroutine,处理连接请求
    • 关闭连接
  • 客户端

    • 建立与服务端的连接
    • 发送请求
    • 接收服务器端返回的处理数据
    • 关闭连接
  • 示意图

Socket 实例例子

  • server.go

    package main
    
    import (
        "fmt"
        "net"
    )
    
    func process(conn net.Conn) {
        
        defer conn.Close()
        
        for {
            buf := make([]byte,1024)
            n, err := conn.Read(buf)
            if err != nil {
                fmt.Println("服务器的err=",err)
                return
            }
            fmt.Println(string(buf[:n])"客户端发送了")
        }
        
    }
    
    func main() {
        
        fmt.Println("服务器开始监听")
        // 1. tcp : 表示使用的协议是tcp
        // 2. 0.0.0.0:8888 :表示监听的端口是8888
        listen, err := net.Listen("tcp", "0.0.0.0:8888")
        
        if err != nil {
            fmt.Println("err=", err)
            return
        }
        
        // 延时关闭资源
        defer listen.Close()
        
        for {
            // 等待客户端连接
            conn, err := listen.Accept()
            if err != nil {
                fmt.Println("err=", err)
                return
            } else {
                fmt.Printf("连接成功,客户端ip=%v",conn.RemoteAddr().String())
            }
            
            go process(conn)
        }
    }
    
  • client.go

    package main
    
    import (
        "fmt"
        "net"
    )
    
    func main() {
        
        conn,err := net.Dial("tcp","192.168.20.253:8888")
        
        if err != nil {
            fmt.Println("err=", err)
        }
        
        defer conn.Close()
        
        reader := bufio.NewReader(os.Stdin)
        line, err := reader.ReadString("\n")
        
        if err != nil {
            fmt.Println("err=", err)
        }
        
        n, err := conn.Write([]byte(line))
        
        if err != nil {
            fmt.Println("err=", err)
        }
        
        fmt.Printf("客户端发送了 %d 个字节,并退出", n)
    }
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值