【go笔记】TCP编程

2022/1/1 17:09:35

本文主要是介绍【go笔记】TCP编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

  • TCP服务端的处理流程
    • 监听端口
    • 接收客户端请求建立连接
    • 创建goroutine处理链接

示例代码:TCP服务端

package main

import (
	"net"
	"bufio"
	"fmt"
)

// 处理函数
func process(conn net.Conn) {
	// 最终关闭连接
	defer conn.Close()
	for {
		reader := bufio.NewReader(conn)
		var buf [128]byte
		// 读取数据
		n,err := reader.Read(buf[:])
		if err != nil {
			fmt.Println("Read from client failed, error: ",err)
			break
		}
		recvStr := string(buf[:n])
		fmt.Println("收到client端发来的数据: ",recvStr)
		// 发送数据
		conn.Write([]byte(recvStr))
	}
}

func main() {
	listen, err := net.Listen("tcp", "0.0.0.0:8000")
	if err != nil {
		fmt.Println("Listen Port 0.0.0.0:8000 failed, error: ",err)
		return
	}
	for {
		conn, err := listen.Accept()
		if err != nil {
			fmt.Println("Accept failed, error: ",err)
			continue
		}
		go process(conn)
	}
}

示例代码:TCP客户端

package main

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

func main() {
	conn, err := net.Dial("tcp", "127.0.0.1:8000")
	if err != nil {
		fmt.Println("connect to 127.0.0.1:8000 error, error: ",err)
		return
	}

	// 关闭连接
	defer conn.Close()

	inputReader := bufio.NewReader(os.Stdin)
	for {
		// 读取输入
		input,_ := inputReader.ReadString('\n')
		inputInfo := strings.Trim(input, "\r\n")
		// 输入q推出
		if strings.ToUpper(inputInfo) == "Q" {
			return
		}
		// 发送数据
		_,err = conn.Write([]byte(inputInfo))
		if err != nil {
			fmt.Println(err)
			return
		}
		buf := [512]byte{}
		n, err := conn.Read(buf[:])
		if err != nil {
			fmt.Println("recv failed, error: ",err)
			return
		}
		fmt.Println(string(buf[:n]))
	}
}

参考文档

  • Go语言中文文档之TCP编程


这篇关于【go笔记】TCP编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程