golang(9):网络编程 & redis
发布时间:2020-12-16 09:21:51 所属栏目:大数据 来源:网络整理
导读:网络编程 TCP/IP 协议: 1 . TCP(传输控制协议) -- 应用程序之间通信 2 . UDP(用户数据包协议)-- 应用程序之间的简单通信 3 . IP(网际协议) -- 计算机之间的通信 4 . DHCP(动态主机配置协议) -- 针对动态寻址 TCP?编程 go服务端的处理流程: a. 监听
网络编程TCP/IP 协议: 1. TCP(传输控制协议) -- 应用程序之间通信 2. UDP(用户数据包协议)-- 应用程序之间的简单通信 3. IP(网际协议) -- 计算机之间的通信 4. DHCP(动态主机配置协议) -- 针对动态寻址 TCP?编程 go服务端的处理流程: a. 监听端口
b. 接收客户端的连接
c. 创建 goroutine,处理该连接
示例代码: package main import ( "fmt" "net" // 网络相关的包都在这个 net 包里面 ) func main(){ fmt.Println("start server...") // 1. 监听ip和端口 listen,err := net.Listen("tcp","0.0.0.0:50000") // 监听端口;第一个参数是监听什么类型的协议,第二个参数是监听的 端口, 0.0.0.0 表示监听这台机器上的所有 ip (监听所有的网卡) if err != nil { fmt.Println("listen failed,err:",err) return } // 2. 接收连接 for { conn,err := listen.Accept() // 接收连接;conn 表示与当前用户之间的通信的管道(连接) if err != nil { fmt.Println("accept failed,err) continue } // 3. 创建 goroutine 去处理该连接 go process(conn) // 新起一个 goroutine 去处理这个连接 } } func process(conn net.Conn){ // net.Conn 类型 defer conn.Close() // 执行完后要把连接关掉,要不然会造成资源泄露 for { buf := make([]byte,512) // 网络连接发过来的是字节流,所以定义一个 byte 切片 _,err := conn.Read(buf) // conn.Read()接收的是一个 byte切片; 从 conn 这个对象里面 读取客户端发来的数,保存到 buf数组 中; conn.Read() 返回两个参数:第一个参数是读取到了多少个字节,第二个是 error if err != nil { fmt.Println("read err:",err) return } fmt.Print("read:",string(buf)) // 把 byte切片 转换为 字符串 } } go客户端的处理流程: a. 建立与服务端的连接
b. 进行数据接收
c. 关闭连接
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |