1、创建一个函数SendMsg()
,开启监听服务器,并且创建连接,接收多个用户发送过来的数据
func SendMsg() {
//1、监听
listener, err := net.Listen("tcp", "127.0.0.1:8989")
if err != nil {
fmt.Println("err = ", err)
return
}
//函数调用完毕,自动关闭conn
defer listener.Close()
//2、接收多个用户
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("接收错误信息:", err)
return
}
//3、开一个协程,处理用户请求,每连接一个用户,创建一个协程,我们可以创建一个函数HandleConn()来处理
go HandleConn(conn)
}
}
2、通过上面创建的协程go HandleConn(conn)
,构建HandleConn()函数
func HandleConn(conn net.Conn) {
//函数调用完毕,自动关闭conn
defer conn.Close()
//4、获取客户端的网络地址信息
addr := conn.RemoteAddr().String()
fmt.Println(addr, "连接成功!!!")
buf := make([]byte, 2048)
//5、获取用户数据
for {
n, err := conn.Read(buf)
if err != nil {
fmt.Println("获取数据错误!!!")
return
}
fmt.Printf("[%s]获取的数据: %s\n", addr, string(buf[:n]))
fmt.Println("len = ", len(string(buf[:n])))
//7、如果输入exit就退出
if "exit" == string(buf[:n-1]) {
fmt.Println("你已经退出了")
return
}
//6、把数据转换成大写,再给用户发送回去
conn.Write([]byte(strings.ToUpper(string(buf[:n]))))
}
}
3、在main函数里调用SendMsg()
函数,运行main.go
package main
import "test.cn/src/tcpSend"
func main() {
//执行SendMsg函数
tcpSend.SendMsg()
}
4、下载一个nc(netcat-win32-1.12)工具,通过cmd窗口输入nc 127.0.0.1 8989,注:在输入nc 127.0.0.1 8989之前,先运行服务器
5、再打开多个cmd窗口,输入如下
nc 127.0.0.1 8989
如图: