go语言中文文档 学习笔记(未完)

这里写目录标题

  • 网络编程
    • 互联网协议介绍
    • socket编程
      • socket图解
      • TCP编程
        • 服务端
        • 客户端
      • UDP编程
      • TCP黏包
    • http编程
    • WebSocket编程

网络编程

互联网协议介绍

go语言中文文档 学习笔记(未完)_第1张图片

socket编程

socket图解

Socket是应用层与TCP/IP协议族通信的中间软件抽象层。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket后面,对用户来说只需要调用Socket规定的相关函数,让Socket去组织符合指定的协议数据然后进行通信。
go语言中文文档 学习笔记(未完)_第2张图片

  • Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求
  • 常用的Socket类型有两种:流式Socket和数据报式Socket,流式是一种面向连接的Socket,针对于面向连接的TCP服务应用,数据报式Socket是一种无连接的Socket,针对于无连接的UDP服务应用
  • TCP:比较靠谱,面向连接,比较慢
  • UDP:不是太靠谱,比较快

TCP编程

服务端
  1. 监听端口
  2. 接收客户端请求建立链接
  3. 创建goroutine处理链接。
// tcp/server/main.go
// TCP server端

// 处理函数
func process(conn net.Conn) {
	defer conn.Close() // 关闭连接
	for {
		reader := bufio.NewReader(conn)
		var buf [128]byte
		n, err := reader.Read(buf[:])
		if err != nil {
			fmt.Println("read from client failed, err:", err)
			break
		}
		recvStr := string(buf[:n])
		fmt.Println("收到client端发来的数据:", recvStr)
		conn.Write([]byte(recvStr)) // 发送数据
	}
}

func main() {
	listen, err := net.Listen("tcp", "127.0.0.1:20000")
	if err != nil {
        fmt.Println("listen failed, err:", err)
        return
    }
    for {
		conn, err := listen.Accept() // 建立连接
		if err != nil {
            fmt.Println("accept failed, err:", err)
            continue
        }
        go process(conn) // 启动一个goroutine处理连接
	}
}
客户端
  1. 建立与服务端的链接
  2. 进行数据收发
  3. 关闭链接
// tcp/client/main.go

// 客户端

func main() {
	conn, err := net.Dial("tcp", "127.0.0.1:20000")
	if err != nil {
		fmt.Println("Dial err :", err)
        return
	}

	defer conn.Close() // 关闭连接

	inputReader := bufio.newReader(os.Stdin)
	for {
		input, _ := inputReader.ReadString('\n') // 读取用户输入
		inputInfo := strings.Trim(input, '\r\n')
		if strings.ToUpper(inputInfo) == "Q" { // 如果输入q就退出
			return  
		}
		_, err = conn.Write([]byte(inputInfo)) // 发送数据
        if err != nil {
            return
        }

		buf := [512]byte{}
		n, err := conn.Read(buf[:])
		if err != nil {
			fmt.Println("recv failed, err:", err)
			return 
		}
		fmt.Println(string(buf[:n]))
	}


}

UDP编程

TCP黏包

http编程

WebSocket编程

你可能感兴趣的:(golang,学习,笔记)