Golang 进阶4—— 网络编程

ops/2024/10/8 23:30:34/

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/ops/122859.html

相关文章

软件测试学习笔记

1、软件测试 软件:控制计算机硬件工作的工具 软件测试:使用技术手段验证软件是否满足使用需求 软件测试的目的:减少软件缺陷,保障软件质量 2、测试主流技术 功能测试 自动化测试 接口测试 性能测试 3、测试分类 按照测试…

gbase8s数据库实现黑白名单的几种方案

1、借用操作系统的黑白名单 2、使用数据库 TRUSTED CONTEXT 机制 CREATE TRUSTED CONTEXT tcx1USER rootATTRIBUTES (ADDRESS 172.16.39.162)ATTRIBUTES (ADDRESS 172.16.39.163)ENABLEWITH USE FOR wangyx WITHOUT AUTHENTICATION; 如上创建 可信任上下文对象 tcx1 在 jdb…

如何通过视觉分析检测车辆逆行行为

随着交通网络的快速扩展和车辆数量的持续增加,城市交通管理面临着前所未有的挑战。交通事故的多发原因之一是车辆逆行,这种行为不仅严重威胁其他车辆和行人的安全,也加重了交通拥堵问题。因此,如何有效监控并预防车辆逆行成为城市…

【09】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Class类基础全解(属性、方法、继承复用、判断)

序言: 本文详细讲解了关于我们在程序设计中所用到的class类的各种参数及语法。 笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法整理为笔记分享出来,如有代码错误或笔误,欢迎指正。 B站黑马的课程链接&am…

Ascend C 自定义算子开发:高效的算子实现

Ascend C 自定义算子开发:高效的算子实现 在 Ascend C 平台上,开发自定义算子能够充分发挥硬件的性能优势,帮助开发者针对不同的应用场景进行优化。本文将以 AddCustom 算子为例,介绍 Ascend C 中自定义算子的开发流程及关键技术…

VRRP协议

文章目录 一、什么是VRRP协议 一、什么是VRRP协议 VRRP协议是一种用于提高网络可靠性的容错协议。 VRRP协议是一种容错的主备模式的协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,通过VRRP可以在网络…

全都燃起来了!黄金周车市销量成绩出炉

文/王俣祺 导语:国庆黄金周对于其他行业可能是个放松的好时机,但对于国内汽车市场而言可能是下半年最关键的“战场”。这几天,全国各地的车展和4S店简直热闹非凡,新能源车尤其抢镜,优惠活动不断,引得消费者…

[记录]-安装mingw

MinGW下载安装教程 傻瓜式操作【超详细】_mingw-get-setup.exe-CSDN博客