Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13096
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-18 23:11
文章分类

全部博文(12)

文章存档

2017年(11)

2016年(1)

我的朋友

分类: 服务器与存储

2017-03-02 23:53:51

服务端与客户端通讯协议为:4字节长度+内容
package main

import (
    "log"
    "net"
    "strconv"
)


type Server struct {
    localaddr string
}


func New(addr string) *Server {
    server := &Server{
        localaddr: addr,
    }
    return server
}


func main() {
    s := New("172.16.1.28:1234")

    listener, err := net.Listen("tcp", s.localaddr)
    if err != nil {
        log.Fatal("Starting server failed!")
    }
    defer listener.Close()

    for {
        conn, err := listener.Accept()
        log.Println(conn)
        if err != nil {
            log.Println(err)
            continue
        }
        go handleConn(conn)
    }
}


func handleConn(c net.Conn) {
    log.Println(c.RemoteAddr().String())
    defer c.Close()

    msghead := make([]byte, 4)
    msglen, err := c.Read(msghead)
    if err != nil {
        log.Println("Read msglen failed!")
    }
    log.Println("Receive msglen from client:", string(msghead[:msglen]))

    length, err := strconv.Atoi(string(msghead))
    if err != nil {
        log.Println("Atoi failed!")
    }
    data := make([]byte, length)
    datalen, err := c.Read(data)
    log.Println("Receive data from client:", string(data[:datalen]))
    respmsg := "Receive:" + string(data)
    buf := []byte(respmsg)
    _, err = c.Write(buf)
}

阅读(637) | 评论(0) | 转发(0) |
0

上一篇:完数

下一篇:go语言的RPC编程

给主人留下些什么吧!~~