Skip to content

Instantly share code, notes, and snippets.

@guileen
Last active August 29, 2015 14:13
Show Gist options
  • Save guileen/8796e477f1081ca61db1 to your computer and use it in GitHub Desktop.
Save guileen/8796e477f1081ca61db1 to your computer and use it in GitHub Desktop.
TCP服务端demo
package main
import (
"bufio"
"fmt"
"io"
"net"
)
type Client struct {
conn net.Conn
reader io.Reader
}
func (c *Client) readPacket() (string, error) {
// 此函数是分包函数,按需求重写
buf := make([]byte, 4)
io.ReadFull(c.reader, buf)
return string(buf), nil
}
func (c *Client) handlePackets() {
// 协议处理函数
for {
packet, _ := c.readPacket()
fmt.Println(packet)
}
}
func newClient(conn net.Conn) *Client {
client := &Client{
conn: conn,
reader: bufio.NewReader(conn),
}
go client.handlePackets()
return client
}
type Server struct {
listener net.Listener
clients []*Client
}
func (s *Server) handleConnections() {
for {
conn, err := s.listener.Accept()
checkErr(err)
s.clients = append(s.clients, newClient(conn))
}
}
func newServer(listener net.Listener) *Server {
return &Server{
listener: listener,
clients: make([]*Client, 10),
}
}
func main() {
listener, err := net.Listen("tcp", "0.0.0.0:6666")
checkErr(err)
fmt.Println("listen on 6666")
server := newServer(listener)
server.handleConnections()
}
func checkErr(err error) {
if err != nil {
fmt.Printf("Error:", err)
panic(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment