feat(listen): 自 go-hua 迁入监听器封装
- net.Listener 统一封装与 Close 解除 Accept 阻塞, 附测试、例程与 README
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
// listen 包示例:TCP 监听封装(NewListen/Accept/Close/Addr)
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"net"
|
||||
|
||||
"git.zeroonesoft.cn/golib/zogo/listen"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 创建 TCP 监听(端口 0 表示由系统分配)
|
||||
l, err := listen.NewListen("tcp", "127.0.0.1:0")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer l.Close()
|
||||
fmt.Println("监听地址:", l.Addr())
|
||||
|
||||
// echo 服务
|
||||
go func() {
|
||||
for {
|
||||
conn, err := l.Accept()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
go func(c net.Conn) {
|
||||
defer c.Close()
|
||||
scanner := bufio.NewScanner(c)
|
||||
for scanner.Scan() {
|
||||
fmt.Fprintf(c, "echo: %s\n", scanner.Text())
|
||||
}
|
||||
}(conn)
|
||||
}
|
||||
}()
|
||||
|
||||
// 客户端连接测试
|
||||
conn, err := net.Dial("tcp", l.Addr().String())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer conn.Close()
|
||||
fmt.Fprintln(conn, "hello go-hua")
|
||||
line, _ := bufio.NewReader(conn).ReadString('\n')
|
||||
fmt.Print("收到:", line)
|
||||
}
|
||||
Reference in New Issue
Block a user