一, 服務端

package main

import (
	"fmt"
	"net"
)

func handleConnection(conn *net.TCPConn) {
	for {
		buf := make([]byte, 1024)
		n, err := conn.Read(buf)
		if err != nil { //有一個前端已經斷開了
			fmt.Println(err)
			break
		}
		fmt.Println(conn.RemoteAddr().String() + " : " + string(buf[:n]))
		str := "服務器收到了 :" + string(buf[:n])
		conn.Write([]byte(str))
	}
}

func main() {
	tcpAddr, err := net.ResolveTCPAddr("tcp", ":9790")
	if err != nil {
		fmt.Println(err)
		return
	}
	listener, lerr := net.ListenTCP("tcp", tcpAddr)
	if lerr != nil {
		fmt.Println(lerr)
		return
	}
	for {
		conn, aerr := listener.AcceptTCP()
		if aerr != nil {
			fmt.Println(aerr)
			return
		}
		go handleConnection(conn)
	}
}

二, 客户端

package main

import (
	"bufio"
	"fmt"
	"log"
	"net"
	"os"
)

func main() {
	tcpAddr, err := net.ResolveTCPAddr("tcp", ":9790")
	if err != nil {
		log.Fatal(err)
		return
	}
	conn, cerr := net.DialTCP("tcp", nil, tcpAddr)
	if cerr != nil {
		log.Fatal(cerr)
		return
	}
	reader := bufio.NewReader(os.Stdin) //通過控制枱輸入
	for {
		bytes, _, _ := reader.ReadLine()
		conn.Write(bytes)

		//讀取服務端返回的數據
		rb := make([]byte, 1024)
		rn, rerr := conn.Read(rb)
		if rerr != nil {
			log.Fatal(rerr)
			return
		}
		fmt.Println(string(rb[:rn]))
	}
}

三, 結果

Go之原生TCP開發(基礎)_基礎


Go之原生TCP開發(基礎)_基礎_02