Skip to content
开放连接方式(socket)封装
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
README.md
listen.go
tcp.go
udp.go

README.md

socketgo

GoDoc

提供 golang socket 本项目是个代码库

安装

自动安装

go get github.com/nulijiabei/socketgo

手动安装

自己手动从 github 下载代码后,放置在你的 $GOPATH 的 src/github.com/nulijiabei/socketgo 目录下

go install github.com/nulijiabei/socketgo

使用

import socket "github.com/nulijiabei/socket"

tcp := socket.NewTCP("127.0.0.1", "8700", 3)
return tcp.ReadWrite(func(conn *net.TCPConn) error {
    // conn.Write()
    // conn.Read()
    return nil
})
udp := socket.NewUDP("127.0.0.1", "8080", 3)
udp.ReadWrite(func(conn *net.TCPConn) error {
    // conn.Write()
    // conn.Read()
    return nil
})

// 接收客户端发来的所有TCP请求
func (ma *Master) doReadTcpSla(ch chan int) {

    // 监听TCP端口等待注册
    lis, err := socket.NewListen("", "9999", 3).ListenTCP()
    if err != nil {
	log.Fatalln(err)
    }
    // 保证监听正常关闭
    defer lis.Close()

    // 等待连接
    for {
	// 等待 sla 连接
	conn, err := lis.Accept()
	if err != nil {
	    log.Println(err)
	    continue
	}
	// 接收连接线程
	go (func(conn net.Conn) {
	    // 连接交给处理器                
	    err := 处理连接(conn)
	    if err != nil {
		log.Println(err)
	    }
	})(conn)
    }
}

// 监听端口
func (ma *Master) doPeanut(ch chan int) {

    // 监听TCP端口等待注册
    lis, err := socket.NewListen("", "9999", 3).ListenTCP()
    if err != nil {
	log.Fatalln(err)
    }
    // 保证监听正常关闭
    defer lis.Close()

    // 等待连接
    for {
	// 等待 sla 连接
	conn, err := lis.Accept()
	if err != nil {
	    continue
	}
	// 建立读写流
	r := bufio.NewReader(conn)
	w := bufio.NewWriter(conn)
	// 存储返回信息
	datas := make([]byte, 0)
	// 循环内进行读取
	for {
	    // 按行读取
	    data, err := r.ReadBytes('\n')
	    // 遇到结尾跳出
	    if err != nil {
		break
	    }
	    // 保存到数据
	    datas = append(datas, data...)
	}
    }
}

// 向客户端端广播时间戳
func (ma *Master) doTimeSync(ch chan int) {

    // 开始
    for {
	// 建立UDP广播
	conn := socket.NewUDP("255.255.255.255", "8888", 3)
	// 读写
	err := conn.ReadWrite(func(conn *net.UDPConn) error {
	    // 循环广播发送时间戳
	    for {
		// 提取本地时间戳
		_, err := conn.Write([]byte(UnixNano()))
		if err != nil {
		    return err
		}
		// 每10秒发送一次
		time.Sleep(time.Second * 10)
	    }
	    // 不会到这...
	    return nil
	})
	// 踢出错误
	if err != nil {
	    log.Fatalln(err)
	}
    }
}
You can’t perform that action at this time.