一、概述
上一篇介绍了基本的函数和结构类型,这里就可以开始写服务端和客户端通信小程序了。
如果服务端使用Listen
来监听,那么可以不用ResolveTCPAddr
函数。
现在我们就来写一个server和client,实现功能:client发送数据到server,server将数据转成大写后返回。
二、服务端实现
package main
import (
"net"
"fmt"
"strings"
)
func main(){
tcpAddr, err := net.ResolveTCPAddr("tcp4", "localhost:8080") //创建一个TCPAddr
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))) //转换成大写后返回客户端
}
开启服务端,进入监听状态等待客户端连接:
三、客户端实现
package main
import (
"net"
"fmt"
)
func main(){
tcpAddr, err := net.ResolveTCPAddr("tcp4", "localhost:8080") //TCP连接地址
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就完成了
此处评论已关闭