go 写 TCP 服务端/客户端 基础 :goland 学习记录(1)

300 阅读2分钟

go 写 TCP 服务端/客户端 基础 :goland 学习记录(1)

关于:go 语言 :Socket TCP

使用 go 语言写 TCP 服务端和客户端,最核心的就是 net 这个包。 我们使用这个包,就可以做 TCP 开发了

服务端代码

/*
* Copyright(C),2019-2020, email: 952651117@qq.com
* Author:  dao
* Version: 1.0.0
* Date:    2021/6/11 16:35
* Description:
*
 */

package main

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

func main() {
	//使用协议是tcp,监听的地址是port
	listener, err := net.Listen("tcp", ":10001")
	if err != nil {
		fmt.Println("错误:"+"使用协议是tcp,监听 出错。", "server")
		log.Fatal(err)
	}
	//关闭监听的端口
	defer listener.Close()
	fmt.Println("准备开始侦听")
	for {
		//用conn接收链接
		conn, err := listener.Accept()
		if err != nil {
			fmt.Println("错误:"+"用conn接收链接 出错。", "server")
			log.Fatal(err)
		}
		//定义一个切片
		buf := make([]byte, 1024, 1024)
		//接收到的内容大小。
		n, err := conn.Read(buf)
		if err != nil && err != io.EOF {
			//对方断开连接。
			fmt.Println("错误:"+"对方断开连接。", "server")
			fmt.Println("错误:"+err.Error(), "server")
			log.Fatal(err)
		}
		data := string(buf[0:n])
		fmt.Println("收到:" + data)
		fmt.Println("(回包)服务端收到:" + data)
		conn.Write([]byte("(回包)服务端收到:" + data)) //通过conn的wirte方法将这些数据返回给客户端。

		//在结束这个链接之前需要睡 1 秒钟,再结束当前循环。
		time.Sleep(1 * 1e9)
		fmt.Println("准备与客户端断开连接:已休息:"+fmt.Sprintf("%d 秒", 1), "server")
		//准备与客户端断开连接。
		conn.Close()
	}
}

客户端代码

/*
* Copyright(C),2019-2020, email: 952651117@qq.com
* Author:  dao
* Version: 1.0.0
* Date:    2021/6/11 16:43
* Description:
*
 */

package main

import (
	"fmt"
	"io"
	"log"
	"net"
)

func main() {
	//使用协议是tcp,拨号。
	conn, err := net.Dial("tcp", ":10001")
	if err != nil {
		fmt.Println("错误:"+err.Error(), "server")
		log.Fatal(err)
		return
	}
	fmt.Println("访问IP地址是:", conn.RemoteAddr().String())
	fmt.Printf("客户端链接的地址及端口是:%v\n", conn.LocalAddr())
	//向服务端发送数据
	n, err := conn.Write([]byte("你好,我叫 daolizhe "))
	if err != nil {
		fmt.Println("错误:"+err.Error(), "server")
		log.Fatal(err)
		return
	}
	fmt.Println("向服务端发送的数据大小是:", n)
	//定义一个切片
	buf := make([]byte, 1024, 1024)
	//接收到的内容大小。
	n, err = conn.Read(buf)
	if err != nil && err != io.EOF {
		//对方断开连接
		fmt.Println("错误:"+err.Error(), "server")
		log.Fatal(err)
		return
	}
	//将回包的内容打印出来。
	fmt.Println(string(buf[:n]))
	//断开TCP链接。
	conn.Close()
}

效果

服务端效果如下:

服务端效果

客户端效果如下:

客户端效果

源码

不想代码:源码文件可以私信