go微服务📗Go语言:基础大全Go语言实践

Golang高并发教程之 TCP时钟服务器

2019-06-15  本文已影响1人  我加入简书的路程

示例:TCP时钟服务器

package main

import (
    "io"
    "log"
    "net"
    "time"
)

func main() {
    listenner,err:=net.Listen("tcp","localhost:8000")
    if err != nil {
        log.Fatal(err)
    }
    for  {
        conn,err := listenner.Accept()
        if err != nil {
            log.Print(err)
            continue
        }
        handleConn(conn)
    }
}

func handleConn(c net.Conn) {
    defer c.Close()
    for{
        _,err:=io.WriteString(c,time.Now().Format("15:04:05\n"))
        if err != nil {
            return
        }
        time.Sleep(1*time.Second)
    }
}

之后使用nc(netcat)连接tcp服务器

 nc localhost 8000

返回结果

catdeiMac:mysql cat$ nc localhost 8000
11:12:25
11:12:26
11:12:27
11:12:28
11:12:29
11:12:30

分析

服务器分析

外部函数分析


本教程用到的源代码

func WriteString(w Writer, s string) (n int, err error) {
    if sw, ok := w.(StringWriter); ok {
        return sw.WriteString(s)
    }
    return w.Write([]byte(s))
}

type Writer interface {
    Write(p []byte) (n int, err error)//实现了方法
}
type Conn interface {
    Read(b []byte) (n int, err error)
    Write(b []byte) (n int, err error)//实现了方法
    Close() error
    LocalAddr() Addr
    RemoteAddr() Addr
    SetDeadline(t time.Time) error
    SetReadDeadline(t time.Time) error
    SetWriteDeadline(t time.Time) error
}

这里的c之所以能够作为 func WriteString 的参数,是因为Conn实现了Writer的全部的方法。

上一篇下一篇

猜你喜欢

热点阅读