golang9:网络编程 & redis

网络编程

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

相关文章

类型转换 1、int转string 2、string转int 3、string转float ...
package main import s "strings" import...
类使用:实现一个people中有一个sayhi的方法调用功能,代码如...
html代码: beego代码:
1、读取文件信息: 2、读取文件夹下的所有文件: 3、写入文件...
配置环境:Windows7+推荐IDE:LiteIDEGO下载地址:http:...