手记

go语言实现 tcp客户端/服务端


/ server.go /

package main

import (

"bufio"

"fmt"

"net"

"time"

)

func main() {

var tcpAddr *net.TCPAddr

    tcpAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:9999")

    tcpListener, _ := net.ListenTCP("tcp", tcpAddr)

    defer tcpListener.Close()

    for {

            tcpConn, err := tcpListener.AcceptTCP()

            if err != nil {

                    continue

            }

            fmt.Println("A client connected : " + tcpConn.RemoteAddr().String())

            go tcpPipe(tcpConn)

    }

}

func tcpPipe(conn *net.TCPConn) {

ipStr := conn.RemoteAddr().String()

defer func() {

fmt.Println("disconnected :" + ipStr)

conn.Close()

}()

reader := bufio.NewReader(conn)

    for {

            message, err := reader.ReadString('\n')

            if err != nil {

                    return

            }

            fmt.Println(string(message))

            msg := time.Now().String() + "\n"

            b := []byte(msg)

            conn.Write(b)

    }

}

/client.go /

package main

import (

"bufio"

"fmt"

"net"

"time"

)

var quitSemaphore chan bool

func main() {

var tcpAddr *net.TCPAddr

tcpAddr, _ = net.ResolveTCPAddr("tcp", "127.0.0.1:9999")

    conn, _ := net.DialTCP("tcp", nil, tcpAddr)

    defer conn.Close()

    fmt.Println("connected!")

    go onMessageRecived(conn)

    b := []byte("time\n")

    conn.Write(b)

    <-quitSemaphore

}

func onMessageRecived(conn *net.TCPConn) {

reader := bufio.NewReader(conn)

for {

msg, err := reader.ReadString('\n')

fmt.Println(msg)

if err != nil {

quitSemaphore <- true

break

}

time.Sleep(time.Second)

b := []byte(msg)

conn.Write(b)

}

}

©著作权归作者所有:来自51CTO博客作者ebayboy的原创作品,如需转载,请注明出处,否则将追究法律责任


0人推荐
随时随地看视频
慕课网APP