网络编程
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. 关闭连接
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。