• Go简单聊天


    用Go简单实现网络通信

    其余功能可以在这个模型上继续加,比如增加通信人数,实现聊天

    server 端

    package main
    
    import (
        "fmt"
        "log"
        "net"
        "os"
    )
    
    func broadcaster() {    //功能代完善
    
    }
    
    func handleCoon(conn net.Conn) {
        msg := ""
        for {
            data := make([]byte,1024)
            msg_read,err := conn.Read(data)
            if msg_read == 0 {  //也可以写成  if(msg_read == 0 || err != nil) { } 
                continue
            }else if err != nil {
                fmt.Fprintf(os.Stdout,"readmsg err = %v",err)
                continue
            }
    
            msg_read_str := string(data[0:msg_read])
            if msg_read_str == "quit" {
                conn.Write([]byte("Exit..."))
                break
            }
    
            fmt.Println("client msg = ",msg_read_str)
    
            fmt.Printf("send to client : ")
            fmt.Scan(&msg)
    
            conn.Write([]byte(msg))
        }
    
        fmt.Println("client close")
        conn.Close()
    }
    
    func main() {
    
        lis,err := net.Listen("tcp","127.0.0.1:8888")
        if err != nil {
            log.Fatal(err)
        }
    
        defer lis.Close()
        fmt.Println(lis)
        go broadcaster()
    
        for {
            conn,err := lis.Accept()
            if err != nil {
                fmt.Fprintf(os.Stdout,"err = %v",err)
                continue
            }
    
            defer conn.Close()
    
            go handleCoon(conn)
        }


    client 端
    package main
    
    import (
        "fmt"
        "net"
        "os"
    )
    
    func main() {
    
        conn,err := net.Dial("tcp","127.0.0.1:8888")
        if err != nil {
            fmt.Fprintf(os.Stdout,"err = %v",err)
        }
    
        defer conn.Close()
    
        fmt.Println("connect server sucess")
    
        var msg string
    
        for {
            msg = ""
            fmt.Printf("send msg : ")
            fmt.Scan(&msg)
    
            conn.Write([]byte(msg))
    
            data := make([]byte,1024)
            msg_read,err := conn.Read(data)
            if msg_read == 0 {    //和上面一样
                fmt.Println("to short for msg")
                continue
            }else if err != nil {
                fmt.Fprintf(os.Stdout,"err = %v",err)
                continue
            }
    
            msg_read_str := string(data[0:msg_read])
    
            if msg_read_str == "quit" {
                fmt.Println("server close.....")
                break
            }
            fmt.Println("to you msg = ",msg_read_str)
        }
    }
    
    



  • 相关阅读:
    「CSP模拟」模拟测试6
    「CSP模拟」模拟测试5
    镇黑板
    求和「Dirichlet 前缀和」
    二叉搜索树「区间DP」
    序列
    [CSP模拟]异或帽子+传话游戏+全球覆盖+幂次序列
    MySQL常用引擎及优缺点
    Django项目远程开发环境搭建
    MySQL8.0安装与配置
  • 原文地址:https://www.cnblogs.com/--just-lbk/p/9684116.html
Copyright © 2020-2023  润新知