一、概述
上一篇介绍了基本的函数和结构类型,这里就可以开始写服务端和客户端通信小程序了,通信的基本的流程如下:
如果服务端使用Listen
来监听,那么可以不用ResolveTCPAddr
函数。
现在我们就来写一个server和client,实现功能:client发送数据到server,server将数据转成大写后返回。
二、服务端实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| package main import ( "net" "fmt" "strings" ) func main(){ tcpAddr, err := net.ResolveTCPAddr("tcp4", "localhost:8080") if err != nil{ fmt.Println(err) return } tcpLinstener, err := net.ListenTCP("tcp4", tcpAddr) if err != nil{ fmt.Println(err) return } fmt.Printf("Start listen:[%s]", tcpAddr) tcpCoon, err := tcpLinstener.AcceptTCP() if err != nil{ fmt.Println(err) return } defer tcpCoon.Close() data := make([]byte, 2048) n, err := tcpCoon.Read(data) if err != nil{ fmt.Println(err) return } recvStr := string(data[:n]) fmt.Println("Recv:", recvStr) tcpCoon.Write([]byte(strings.ToUpper(recvStr))) }
|
开启服务端,进入监听状态等待客户端连接:
三、客户端实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| package main import ( "net" "fmt" ) func main(){ tcpAddr, err := net.ResolveTCPAddr("tcp4", "localhost:8080") if err != nil{ fmt.Println(err) return } tcpCoon, err := net.DialTCP("tcp4", nil, tcpAddr) if err != nil{ fmt.Println(err) return } defer tcpCoon.Close() sendData := "helloworld" n, err := tcpCoon.Write([]byte(sendData)) if err != nil{ fmt.Println(err) return } fmt.Printf("Send %d byte data success: %s", n, sendData) recvData := make([]byte, 2048) n, err = tcpCoon.Read(recvData) if err != nil{ fmt.Println(err) return } recvStr := string(recvData[:n]) fmt.Printf("Response data: %s", recvStr)
|
运行客户端,服务端将会响应客户端请求:
服务端状态如下:
至此,一个完成的server和clinet就完成了