首先,我们需要设计一个服务器端。
那么,看服务器端是怎么工作的。
1、首先,服务器端需要监听计算机的某个端口。
/*监听8090端口*/
lt, err := net.Listen("tcp", "127.0.0.1:8090")
if err != nil{
fmt.Println("Listen err : ", err)
return
}
fmt.Println("Link TCP 127.0.0.1:8090 OK")
defer lt.Close()
2、我们需要写个阻塞,接受客户端连接,循环阻塞接收。
/*阻塞*/
for{
conn, err1 := lt.Accept()
if err1 != nil{
fmt.Println("Accept err :", err1)
continue
}
/*接收到客户端连接*/
addr := conn.RemoteAddr()
fmt.Printf("%s 已连接上线!\n",addr)
go Kehuduan(conn, addr)
}
3、值得注意的是,处理客户端连接,你需要创建一个协程去专门服务它。
所以,我添加了增加协程的代码。
go Kehuduan(conn, addr)
4、对于客户端,我们需要写个专门的处理函数
//处理与客户端的连接
func Kehuduan(conn net.Conn, addr net.Addr){
defer conn.Close()
for{
/*输出*/
buf := make([]byte, 1024)
num, err2 := conn.Read(buf)
if err2 != nil{
fmt.Println(addr, "Read err :", err2)
return
}
if strings.ToUpper(string(buf[:num])) == "EXIT"{
fmt.Println(addr, "用户已经断开连接!")
return
}
fmt.Printf("%s TCP客户端发来数据:%s\n", addr, buf[:num])
}
}
下面是全部服务器端代码
package main
import (
"fmt"
"net"
"strings"
)
func main(){
/*监听*/
lt, err := net.Listen("tcp", "127.0.0.1:8090")
if err != nil{
fmt.Println("Listen err : ", err)
return
}
fmt.Println("Link TCP 127.0.0.1:8090 OK")
defer lt.Close()
/*阻塞*/
for{
conn, err1 := lt.Accept()
if err1 != nil{
fmt.Println("Accept err :", err1)
continue
}
/*接收到客户端连接*/
addr := conn.RemoteAddr()
fmt.Printf("%s 已连接上线!\n",addr)
go Kehuduan(conn, addr)
}
}
//响应客户端请求
func Kehuduan(conn net.Conn, addr net.Addr){
defer conn.Close()
for{
/*输出*/
buf := make([]byte, 1024)
num, err2 := conn.Read(buf)
if err2 != nil{
fmt.Println(addr, "Read err :", err2)
return
}
if strings.ToUpper(string(buf[:num])) == "EXIT"{
fmt.Println(addr, "用户已经断开连接!")
return
}
fmt.Printf("%s TCP客户端发来数据:%s\n", addr, buf[:num])
}
}