TCP客户端:

// TCP Client端设计

// 使用命令行启动 *.exe 127.0.0.1:5000

package main

import (

"fmt"

"net"

"os"

"time"

)

func main() {

var buf [512]byte

if len(os.Args) != 2 {

fmt.Fprintf(os.Stderr, "Usage: %s host:port", os.Args[0])

}

service := os.Args[1]

// 绑定

tcpAddr, err := net.ResolveTCPAddr("tcp", service)

checkError(err)

// 连接

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

checkError(err)

rAddr := conn.RemoteAddr()

//for {

// 发送

n, err := conn.Write([]byte("Hello server"))

checkError(err)

// 接收

n, err = conn.Read(buf[0:])

checkError(err)

fmt.Println("Reply form server", rAddr.String(), string(buf[0:n]))

time.Sleep(time.Second * 2)

//}

conn.Close()

os.Exit(0)

}

func checkError(err error) {

if err != nil {

fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())

os.Exit(1)

}

}

TCP服务器

// TCP Server 端设计

// 使用命令行启动 *.exe

package main

import (

"fmt"

"net"

"os"

)

func main() {

// 服务端端口

service := ":5000"

// 绑定

tcpAddr, err := net.ResolveTCPAddr("tcp", service)

checkError(err)

// 监听

listener, err := net.ListenTCP("tcp", tcpAddr)

checkError(err)

for {

// 接受

conn, err := listener.Accept()

if err != nil {

continue

}

// 创建 Goroutine

go handleClient(conn)

}

}

func handleClient(conn net.Conn) {

// 逆序调用 Close() 保证连接能正常关闭

defer conn.Close()

var buf [512]byte

for {

// 接收数据

n, err := conn.Read(buf[0:])

if err != nil {

return

}

rAddr := conn.RemoteAddr()

fmt.Println("Receive from client", rAddr.String(), string(buf[0:n]))

_, err2 := conn.Write([]byte("Welcome client"))

if err2 != nil {

return

}

}

}

func checkError(err error) {

if err != nil {

fmt.Fprintf(os.Stderr, "Fatal error %s", err.Error())

os.Exit(1)

}

}

有疑问加站长微信联系(非本文作者)