16网络编程
16.1tcp
client
- 建立与服务端的链接
- 进行数据收发
- 关闭链接
func main(){conn, err := net.Dial("tcp", "127.0.0.1:20000")if err != nil{fmt.Printf("dial failed:%v\n", err)return}input := bufio.NewReader(os.Stdin)for{s, err := input.ReadString('\n')if err != nil{continue}s = strings.TrimSpace(s)if strings.ToUpper(s) == "Q"{return}_, err2 := conn.Write([]byte(s))if err != nil{fmt.Printf("send failed:%v", err2)return}var buf [1024]byten , err3 := conn.Read(buf[:])if err3 !=nil{fmt.Printf("read failed, %v\n", err3)}fmt.Println("received msg:", string(buf[:n]))}
}
server
- 监听端口
- 接收客户端请求建立链接
- 创建goroutine处理链接。
func process(conn net.Conn){defer conn.Close()for{reader := bufio.NewReader(conn)var buf [128]byten, err := reader.Read(buf[:])if err != nil{fmt.Printf("err occured :%v\n", err)break}recv := string(buf[:n])fmt.Println("receive data:", recv)conn.Write([]byte("ok"))}}func main(){listen, err := net.Listen("tcp", "127.0.0.1:20000")if err!=nil{fmt.Printf("err occured:%v\n", err)return}for{conn, err := listen.Accept()if err != nil{fmt.Printf("err occured:%v\n", err)}go process(conn)}
}
16.2udp
client
func main(){udp, err := net.DialUDP("udp", nil, &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1),Port: 30000,})if err != nil{fmt.Println("err occured---", err)return}defer udp.Close()for{input := bufio.NewReader(os.Stdin)s, _ := input.ReadString('\n')_, err2 := udp.Write([]byte(s))if err2 != nil{fmt.Println("-err-------")return}var buf [1024]byten, addr, err3 := udp.ReadFromUDP(buf[:])if err3 != nil{fmt.Println("error---:", err3)}fmt.Printf("read from%v, data :%v", addr, string(buf[:n]))}}
server
func main(){listen, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.IPv4(127, 0, 0, 1),Port: 30000,})if err != nil{fmt.Printf("err occured when listen udp:%v", err)}defer listen.Close()for{var buf [1024]byten, addr, err := listen.ReadFromUDP(buf[:])if err != nil{fmt.Println("err occured when read from udp:", err)return}fmt.Println("接受到的数据为:", string(buf[:n]))fmt.Println(addr)_, err2 := listen.WriteToUDP(buf[:n], addr)if err2 != nil{fmt.Printf("err occured:%v", err2)continue}}}