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)
}
}