Golang 进阶4—— 网络编程

news/2024/10/9 5:45:28/

Golang 进阶4—— 网络编程

注意,该文档只适合有编程基础的同学,这里的go教程只给出有区别的知识点

网络编程: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大,功能强的网络系统,从而使众多的计算机可以方便的相互通信、共享硬件、软件等资源

1.1 客户端
// 客户端
import ("fmt""net" // 所有网络编程都在这个包下
)func main () {// 打印fmt.Println("客户端启动。。。")conn, err := net.Dial("tcp", "127.0.0.1:8888")if err != nil {fmt.Println("客户端连接失败: ", err)return}fmt.Println("客户端连接成功。。。conn: ", conn)
}
1.2 服务器端
// 服务器端
import ("fmt""net" // 所有网络编程都在这个包下
)func main () {// 打印fmt.Println("服务端启动。。。")// 进行监听, 需要指定tcp, 服务器端的ip + portln, err := net.Listen("tcp", "127.0.0.1:8888")if err != nil {fmt.Println("服务端启动失败: ", err)return}for  {// 监听成功后, 等待客户端的相应conn, err := ln.Accept()if err != nil {fmt.Println("服务端连接失败: ", err)return}go func() {fmt.Println("服务端连接成功。。。")defer conn.Close()}()}}
1.3 客户端输出结果
(base) PS E:\Goproject\src\gocode\testproject02> go run .\client\main.go
客户端启动。。。
客户端连接成功。。。conn:  &{{0xc000092288}}
1.4 服务器端输出结果
(base) PS E:\Goproject\src\gocode\testproject02> go run .\server\main.go
服务端启动。。。
服务端连接成功。。。
1.5 通信
1.5.1 client端
package main
// 客户端
import ("fmt""net" // 所有网络编程都在这个包下"bufio""os"
)func main () {// 打印fmt.Println("客户端启动。。。")conn, err := net.Dial("tcp", "127.0.0.1:8888")if err != nil {fmt.Println("客户端连接失败: ", err)return}fmt.Println("客户端连接成功。。。conn: ", conn)// 通过客户端发送单行数据, 然后退出reader := bufio.NewReader(os.Stdin) // os.Stdin代表终端标准输入// 读取一行用户输入的信息str, err := reader.ReadString('\n') // 接收到的数据以换行结尾if err != nil {fmt.Println("读取用户输入失败:", err)return} else {// 将输入的内容发送给服务器n, err := conn.Write([]byte(str))if err != nil {fmt.Println("发送数据失败:", err)return} else {fmt.Println("发送数据成功, 一共发送了", n, "字节的数据")}}
}
1.5.2 server端
// 服务器端
import ("fmt""net" // 所有网络编程都在这个包下
)//3、处理函数
func process (conn net.Conn) {defer conn.Close()fmt.Println("服务端处理。。。")for {// 创建一个切片, 将读取的数据放入切片中进行处理buf := make([]byte, 1024)// 从连接中读取数据的操作n, err := conn.Read(buf)if err != nil {fmt.Println("read err", err)return}else {fmt.Println("read data", string(buf[:n]))}}
}func main () {// 1、打印fmt.Println("服务端启动。。。")ln, err := net.Listen("tcp", "127.0.0.1:8888")if err != nil {fmt.Println("服务端启动失败: ", err)return}for  {conn, err := ln.Accept()if err != nil {fmt.Println("服务端连接失败: ", err)continue}fmt.Println("服务端连接成功。。。")// 2、准备一个协程, 用于处理客户端服务请求go process(conn) // 处理客户端请求}
}
1.5.3 输出结果——client
(base) PS E:\Goproject\src\gocode\testproject02> go run .\client\main.go
客户端启动。。。
客户端连接成功。。。conn:  &{{0xc00011e288}}
123
发送数据成功, 一共发送了 5 字节的数据
1.5.4 输出结果——server
(base) PS E:\Goproject\src\gocode\testproject02> go run .\server\main.go
服务端启动。。。
服务端连接成功。。。
服务端处理。。。
read data 123

http://www.ppmy.cn/news/1536493.html

相关文章

机器学习K近邻算法——分类问题K近邻算法示例

针对“数据8.1”,讲解分类问题的K近邻算法,以V1(转型情况)为响应变量,以V2(存款规模)、V3(EVA)、V4(中间业务收入)、V5(员工人数&…

PHP爬虫:获取商品SKU详细信息的利器

在电子商务领域,SKU(Stock Keeping Unit)即库存单位,是商品信息管理中的基础元素。获取商品的SKU详细信息对于电商运营者来说至关重要,它直接关系到库存管理、订单处理、客户服务等多个方面。PHP作为一种广泛使用的服务…

软件测试之压力测试

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 压力测试 压力测试是一种软件测试,用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力&…

车辆重识别(2021NIPS无分类器扩散指南)论文阅读2024/10/08

什么叫做有条件和无条件的扩散模型? FID是什么? IS是什么? λ是给出的参数,就像去噪扩散模型中每个时间步的β一样,每一时间步的λ都会给出。对于是否有条件信息c的概率 我的意思是在每一个训练轮次中&#xf…

基于Zynq SDIO WiFi移植三(支持2.4/5G)

应用问题-WIFI作为AP-hostapd多次连接 设备作为WIFI热点时,连接出现了下述问题: 1 手机连接需要三次,三次都需要输入密码; 2 平板连接需要三次,三次都需要输入密码; 3 电脑连接需要一次,无感…

【CuPy报错】NVRTC_ERROR_COMPILATION (6)找不到 ‘vector_types.h‘

cupy安装不要再使用pip install cupy了, 已经替换成基于版本安装了pip install cupy-cuda12x,详见cupy官网。 安装完成后,在import cupy之后报错,找不到 ‘vector_types.h’: CompileException: /home/zoe/venv/lib/python3.10/…

查看PyTorch的GPU使用情况的工具

文章目录 torch.cuda APISnapshottorchinfo torch.cuda API torch.cuda.memory_stats:返回给定设备的 CUDA 内存分配器统计信息字典。该函数的返回值是一个统计字典,每个字典都是一个非负整数。torch.cuda.memory_summary:返回给定设备当前内…

基于STM32设计的智能学习台灯(华为云IOT)(238)

文章目录 一、前言1.1 项目介绍【1】开发背景【2】项目实现的功能【3】项目硬件模块组成【4】ESP8266工作模式配置1.2 设计思路【1】整体设计思路【2】整体构架【3】上位机开发思路1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要1.4 开发工具的选择【1…