服务端
package main import ( "fmt" "net" ) func process(conn net.Conn){ defer conn.Close() for{ buf:=make([]byte,1024) fmt.Printf("服务器在等待客户端%s发送消息",conn.RemoteAddr().String()) n,err:=conn.Read(buf)//从conn读取数据 if err!=nil{ fmt.Printf("客户端%s退出。。。",conn.RemoteAddr().String()) return } fmt.Println(string(buf[:n])) } } func main(){ fmt.Println("服务器开始监听") listen,err:=net.Listen("tcp","0.0.0.0:7077") if err!=nil{ fmt.Println("Listen出错!",err) return } defer listen.Close() //循环等待客户端来连接 for{ fmt.Println("等待客户端来连接") conn,err:=listen.Accept() if err!=nil{ fmt.Println("Accept出错",err) }else{ fmt.Printf("Accept() suc con=%v 客户端 ip=%v ", conn, conn.RemoteAddr().String()) } //这里准备一个协程,为客户端服务 go process(conn) } }
客户端
package main import ( "bufio" "fmt" "net" "os" ) func main(){ conn,err:=net.Dial("tcp","127.0.0.1:7077") if err!=nil{ fmt.Println("Dial出错",err) return } //功能一:客户端可以发送单行数据,然后就退出 reader := bufio.NewReader(os.Stdin) //os.Stdin 代表 //从终端读取一行用户输入,并准备发送给服务器 line, err := reader.ReadString(' ') if err != nil { fmt.Println("readString err=", err) } //再将 line 发送给 服务器 n, err := conn.Write([]byte(line)) if err != nil { fmt.Println("conn.Write err=", err) } fmt.Printf("客户端发送了 %d 字节的数据,并退出", n) }