yyz notes yyz notes
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

益章

可乐鸡翅
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • golang基础

    • 初识golang

    • golang基础语法

    • golang流程控制

    • golang函数

    • golang内置函数

    • golang包

    • golang错误异常处理

    • golang面向对象(结构体)

    • golang文件处理

    • golang并发编程简介

    • golang并发编程-协程

    • golang网络编程

      • 基础介绍
      • 基于TCP协议的网络通信示例
        • 创建客户端
          • 调用Dial函数:(net包下)
          • 代码
        • 创建服务端
          • 进行监听:(Listen函数在net包下)
          • 代码
    • 反射 reflect

  • golang高级

  • 常用组件

  • gin

  • golang
  • golang基础
  • golang网络编程
YiZhang-You
2023-05-24
目录

基于TCP协议的网络通信示例

# 2. 基于TCP协议的网络通信示例

Go语言基础之网络编程 - aaronthon - 博客园 (opens new window)

# 创建客户端

# 调用Dial函数:(net包下)

# 代码

package main

import (
	"bufio"
	"fmt"
	"net" //所需的网络编程全部都在net包下
	"os"
)

func main() {
	//打印:
	fmt.Println("客服端启动。。")
	//调用Dial函数:参数需要指定tcp协议,需要指定服务器端的IP+PORT
	conn, err := net.Dial("tcp", "127.0.0.1:8888")
	if err != nil { //连接失败
		fmt.Println("客户端连接失败:err:", err)
		return
	}
	fmt.Println("连接成功,conn:", conn)
	//通过客户端发送单行数据,然后退出:
	reader := bufio.NewReader(os.Stdin) //os.Stdin代表终端标准输入
	//从终端读取一行用户输入的信息:
	str, err := reader.ReadString('\n')
	if err != nil {
		fmt.Println("终端输入失败,err:", err)
	}
	//将str数据发送给服务器:
	n, err := conn.Write([]byte(str))
	if err != nil {
		fmt.Println("连接失败,err:", err)
	}
	fmt.Printf("终端数据通过客户端发送成功,一共发送了%d字节的数据,并退出", n)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 创建服务端

# 进行监听:(Listen函数在net包下)

# 代码

package main

import (
	"fmt"
	"net" //所需的网络编程全部都在net包下
)

func process(conn net.Conn) {
	//连接用完一定要关闭:
	defer conn.Close()
	for {
		//创建一个切片,准备:将读取的数据放入切片:
		buf := make([]byte, 1024)
		//从conn连接中读取数据:
		n, err := conn.Read(buf)
		if err != nil {
			return
		}
		//将读取内容在服务器端输出:
		fmt.Println(string(buf[0:n]))
	}
}
func main() {
	//打印:
	fmt.Println("服务器端启动了。。")
	//进行监听:需要指定服务器端TCP协议,服务器端的IP+PORT
	listen, err := net.Listen("tcp", "127.0.0.1:8888")
	if err != nil { //监听失败
		fmt.Println("监听失败,err:", err)
		return
	}
	//监听成功以后:
	//循环等待客户端的链接:
	for {
		conn, err2 := listen.Accept()
		if err2 != nil { //客户端的等待失败
			fmt.Println("客户端的等待失败,err2:", err2)
		} else {
			//连接成功:
			fmt.Printf("等待链接成功,con=%v ,接收到的客户端信息:%v \n", conn, conn.RemoteAddr().String())
		}
		//准备一个协程,协程处理客户端服务请求:
		go process(conn) //不同的客户端的请求,连接conn不一样的
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

编辑 (opens new window)
基础介绍
反射介绍

← 基础介绍 反射介绍→

最近更新
01
配置yun源
05-24
02
linux-配置python虚拟环境
05-24
03
linux文件目录管理
05-24
更多文章>
Theme by Vdoing | Copyright © 2023-2023 yizhang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式