美文网首页
33.Go语言·TCP网络编程

33.Go语言·TCP网络编程

作者: 一枼落知天下 | 来源:发表于2019-06-18 08:52 被阅读0次

client/main.go

// Go语言·网络编程
package main

import (
    "net"
    "fmt"
    "bufio"
    "os"
    "strings"
)

var content string = `
————————————————Go语言·网络编程————————————————————
一、TCP编程
客户端:
    建立与服务端的连接
    发送请求数据[终端],接收服务器端返回 的结果数据
    关闭连接
`

func main() {
    conn,err := net.Dial("tcp","0.0.0.0:8888")
    if err != nil {
        fmt.Println("Conn Failed...",err)
        return 
    }
    
    fmt.Println("Conn Succ=",conn)
    reader := bufio.NewReader(os.Stdin)

    for {
        line,err := reader.ReadString('\n')
        if err != nil {
            fmt.Println("reader Failed...",err) 
        }

        if strings.Trim(line, "\r\n") == "exit" {
            fmt.Println("客户端退出咯...")
            break
        }


        _,err = conn.Write([]byte(line))
        if err != nil {
            fmt.Println("conn.Write Failed...",err)
        }
    }
}

server/main.go

// Go语言·网络编程
package main

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

var content string = `
————————————————Go语言·网络编程————————————————————
一、TCP编程
服务端:
    监听端口 8888
    接收客户端tcp链接,建立客户端和服务器端的连接
    创建goroutine,处理该连接的请求(通常客户端会通过连接发送请求包)
    
`

func process(conn net.Conn){
    // 关闭
    defer conn.Close()

    // 循环接收客户端发送的数据
    for {
        buffer := make([]byte,1024)
        // 从连接conn中读取
        // 1.等待客户端通过conn发送信息,conn.Write
        // 2.如果客户端没有conn.Write[发送信息],那么
        // 协程就阻塞在这里
        // fmt.Printf("等待客户端发送消息,客户端的ip=%v \n",conn.RemoteAddr().String()) 
        n,err := conn.Read(buffer)
        if err != nil || err == io.EOF {
            // fmt.Println("服务器端口,读取失败:",err)
            return 
        }
        fmt.Print(string(buffer[:n]))
    }
}



func main() {
    fmt.Println("服务端,监听中...")
    // 1.网络协议Tcp
    // 2.在本地监听端口:8888
    listen,err := net.Listen("tcp","0.0.0.0:8888")
    if err != nil {
        fmt.Println("服务端,监听失败...",err)
        return 
    }

    // 延时关闭listen
    defer listen.Close()

    // 循环等待客户端连接
    for {
        //等待客户端连接
        fmt.Println("等待客户端连接...")
        conn,err := listen.Accept()
        if err != nil {
            fmt.Println("Accept() 连接失败...",err) 
        }else{
            fmt.Printf("Accept() 连接成功=%v 客户端的ip=%v \n",conn,conn.RemoteAddr().String()) 
        }
        // 启用协程,为客户端服务
        go process(conn)
    }
    fmt.Printf("listen suc = %v \n",listen)
}

相关文章

网友评论

      本文标题:33.Go语言·TCP网络编程

      本文链接:https://www.haomeiwen.com/subject/qthxqctx.html