加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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. 关闭连接

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读