GO socket编程
服务端
package main
import (
"fmt"
"log"
"net"
"time"
)
type Server struct{}
func NewServer() *Server {
return &Server{}
}
var DafaultServer = NewServer()
func (s *Server) Accept(lis net.Listener) {
for {
conn, err := lis.Accept()
if err != nil {
log.Println("server : accept error:", err)
return
}
go s.Hanlder(conn)
}
}
func Accept(lis net.Listener) {
DafaultServer.Accept(lis)
}
func (s *Server) Hanlder(conn net.Conn) {
defer func() {
conn.Close()
}()
for {
buf := make([]byte, 1024)
log.Printf("服务端在等待客户端%s 发送信息\n ", conn.RemoteAddr().String())
n, err := conn.Read(buf)
if err != nil {
fmt.Println("客户端断开链接")
return
}
log.Println(string(buf[:n]), "time ", time.Now().String())
}
}
func main() {
//addr, _ := net.ResolveTCPAddr("tcp", ":999")
l, err := net.Listen("tcp", ":999")
if err != nil {
log.Fatalln("network error:", err)
}
log.Println("start server on", l.Addr())
Accept(l)
}
客户端
package main
import (
"bufio"
"fmt"
"log"
"net"
"os"
"strings"
)
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:999")
defer func() {
conn.Close()
}()
if err != nil {
log.Fatal("client dial err = ", err)
return
}
reader := bufio.NewReader(os.Stdin)
for {
line, err := reader.ReadString('\n')
if err != nil {
fmt.Println("readString err= ", err)
}
line = strings.Trim(line, "\r\n")
if line == "exit" {
log.Println("客户端退出")
break
}
_, err = conn.Write([]byte(line))
if err != nil {
log.Println("conn err")
break
}
log.Println("客户端发送", line)
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!