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)
    }
}



posted @ 2018-09-20 23:58  NorseLZJ  阅读(383)  评论(0编辑  收藏  举报