server端:
package main
import (
"fmt"
"net"
)
func main() {
//建立监听
listener, err := net.Listen("tcp", "localhost:8080")
if err != nil{
fmt.Println("建立tcp监听失败,err=",err)
return
}
defer func() {
listener.Close()
fmt.Println("服务器已关闭")
}()
fmt.Println("正在监听客户请求")
for {
//循环接入一个客户端(获得专线连接Conn)
conn, _ := listener.Accept()
fmt.Println("成功接入客户端:",conn.RemoteAddr())
//将接入的客户端丢到并发协程中进行处理
go func() {
/*在一个独立的并发任务中与当前客户端IO*/
for {
//在专线连接中与特定的客户端IO
buffer := make([]byte, 1024)
n, _ := conn.Read(buffer)
msg := string(buffer[:n])
fmt.Printf("客户端%v:%s
",conn.RemoteAddr(),msg)
//回复消息
conn.Write([]byte("已阅消息:"+ msg))
//判断客户端是否想离婚
if msg == "exit"{
//断开与客户端的链接
conn.Close()
break
}
}
}()
}
}
client端:
package main
import (
"fmt"
"net"
)
func main() {
//使用udp协议拨号,远程地址127.0.0.1:8080
conn, _ := net.Dial("tcp", "127.0.0.1:8080")
//程序退出前关闭连接,释放io资源
defer func() {
conn.Close()
fmt.Println("客户端已退出")
}()
//创建接收消息的缓冲区
buffer := make([]byte, 1024)
//用户要发送的消息文本
var userInput string
for{
//接收用户输入
fmt.Print("大神请输入:")
fmt.Scan(&userInput)
//如果用户输入exit则退出
//客户端发起交谈
conn.Write([]byte(userInput))
//接收服务端消息
n, err := conn.Read(buffer)
fmt.Println(err)
fmt.Println("服务端:"+string(buffer[:n]))
if userInput == "exit"{
break
}
}
}