当前位置: 首页 > article >正文

Golang 进阶4—— 网络编程

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 + port
	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)
			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.kler.cn/news/336690.html

相关文章:

  • ASK, PSK, FSK, DPSK
  • 代码随想录--字符串--重复的子字符串
  • 今日指数day8实战补充(上)
  • Git 下载及安装超详教程(2024)
  • 算法专题四: 前缀和
  • 关于PyCharm【常见问题、解决方案等】
  • 磁盘存储、B树、B+树
  • 路由器的工作机制
  • helm 测试升级与回滚
  • 重学SpringBoot3-集成Redis(六)之消息队列
  • 解决 OpenCloudOS 中 yum 安装 yum-utils 命令报错的问题
  • RK3568笔记六十四:SG90驱动测试
  • Linux复习--Linux服务管理类(SSH服务、DHCP+FTP、DNS服务、Apache服务、Nginx服务、HTTP状态码)
  • D - Connect the Dots Codeforces Round 976 (Div. 2)
  • 基于SSM的高校勤工助学管理系统的设计与实现(源码+定制+参考文档)
  • 电影选票选座系统|影院购票|电影院订票选座小程序|基于微信小程序的电影院购票系统设计与实现(源码+数据库+文档)
  • 并查集的模拟实现
  • xtu oj 神经网络
  • linux下cmake编译64位,32位,ARM,ARM64程序
  • 论文阅读笔记-LogME: Practical Assessment of Pre-trained Models for Transfer Learning