【GO】入门级网络通信,一看就懂

简介: 【GO】入门级网络通信,一看就懂

1. UDP解释

简介

UDP(User Datagram Protocol),用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。


个人简单理解UDP


  • 相对于TCP会丢失数据
  • 速度快
  • 应用于视频等数据可以包容丢失的情况
  • 1-1 UDP写服务端


看注释,不需要解析

package main
import (
  "fmt"
  "net"
  "os"
)
func HandleError(err error, when string) {
  if err != nil {
    fmt.Println("错误地址,err", when, err)
    // 非正常退出,正常退出为0
    os.Exit(0)
  }
}
func main() {
  // 解析得到UDP地址 返回指针
  udpAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8888")
  HandleError(err, "ResolveUDPAddr")
  // 在UDP地址上建立UDP监听,得到连接  传入指针类型
  udpConn, err := net.ListenUDP("udp", udpAddr)
  HandleError(err, "ListenUDP")
  buffer := make([]byte, 1024)
  // 从连接中读入内容,丢入缓冲区
  n, remoteAddr, err := udpConn.ReadFromUDP(buffer)
  HandleError(err, "udpConn")
  fmt.Printf("读到来自%v的内容:%s", remoteAddr, string(buffer[:n]))
  udpConn.WriteToUDP([]byte("朕以阅"), remoteAddr)
}

1-2 UDP写客户端

package main
import (
  "fmt"
  "net"
  "os"
)
func handleError(err error, when string) {
  if err != nil {
    fmt.Println("错误地址,err", when, err)
    // 非正常退出,正常退出为0
    os.Exit(0)
  }
}
func main() {
  // 拨号请求连接
  conn, e := net.Dial("udp", "127.0.0.1:8888")
  handleError(e, "Dial")
  defer conn.Close()
  // 向连接中写出信息
  n, err := conn.Write([]byte("咔咔手赚网地址:fangkang.top"))
  handleError(err, "Write")
  fmt.Println("写出字节数", n)
  // 创建缓冲区
  buffer := make([]byte, 1024)
  n, err = conn.Read(buffer)
  handleError(err, "conn.Read")
  fmt.Println(string(buffer[:n]))
}

1-3 运行客户端和服务端的代码

先跑服务端代码

屏幕快照 2022-05-19 上午11.29.58.png


         

屏幕快照 2022-05-19 上午11.30.05.png

package main
import (
  "fmt"
  "io/ioutil"
  "net/http"
  "os"
)
func getError(err error, when string) {
  if err != nil {
    fmt.Println("错误地址,err", when, err)
    // 非正常退出,正常退出为0
    os.Exit(0)
  }
}
func main() {
  url := "https://fangkang.top"
  resp, err := http.Get(url)
  getError(err, "http.Get")
  // response属于io资源,用完需要关闭
  defer resp.Body.Close()
  // 获取body的内容
  bytes, err := ioutil.ReadAll(resp.Body)
  getError(err, "ioutil.ReadAll")
  // 返回的是字节需要转为字符串
  fmt.Println(string(bytes))
}


屏幕快照 2022-05-19 上午11.31.01.png

package main
import (
  "fmt"
  "io/ioutil"
  "net/http"
  "os"
  "strings"
)
func postError(err error, when string) {
  if err != nil {
    fmt.Println("错误地址,err", when, err)
    // 非正常退出,正常退出为0
    os.Exit(0)
  }
}
func main() {
  url := "https://www.fangkang.top/api/subjectByType"
  resp, err := http.Post(
    // 请求地址
    url,
    // 携带的数据类型
    "application/x-www-form-urlencoded",
    // 携带的参数
    strings.NewReader("st_id=1"))
  postError(err, "http.Post")
  // response属于io资源,用完需要关闭
  defer resp.Body.Close()
  // 获取body的内容
  bytes, err := ioutil.ReadAll(resp.Body)
  postError(err, "ioutil.ReadAll")
  // 返回的是字节需要转为字符串
  fmt.Println(string(bytes))
}

image.png

相关文章
|
2月前
|
网络协议 Go 开发者
Go语言网络编程基础:构建高效、可靠的网络应用
【2月更文挑战第12天】本文将深入探讨Go语言在网络编程领域的基础知识,包括其强大的并发模型、网络库的使用、TCP/IP和HTTP协议的理解等。通过本文,读者将能够理解Go语言在网络编程中的优势,并掌握构建高效、可靠网络应用的核心技能。
|
2月前
|
数据采集 监控 安全
Go语言在网络安全中的应用
【2月更文挑战第24天】Go语言,作为一种高效且易于维护的编程语言,近年来在网络安全领域得到了广泛的应用。本文旨在探讨Go语言在网络安全中的应用,包括其在防火墙、入侵检测、网络爬虫以及Web安全等方面的应用,并分析了Go语言在网络安全领域的优势与前景。
|
4月前
|
网络协议 Go API
Go语言学习-网络基础
Go语言学习-网络基础
35 0
|
24天前
|
监控 JavaScript 前端开发
《Go 简易速速上手小册》第8章:网络编程(2024 最新版)(下)
《Go 简易速速上手小册》第8章:网络编程(2024 最新版)
30 1
|
24天前
|
存储 JSON Go
《Go 简易速速上手小册》第8章:网络编程(2024 最新版)(上)
《Go 简易速速上手小册》第8章:网络编程(2024 最新版)
46 1
|
2月前
|
JSON Go API
Go语言网络编程:HTTP客户端开发实战
【2月更文挑战第12天】本文将深入探讨使用Go语言开发HTTP客户端的技术细节,包括发送GET和POST请求、处理响应、错误处理、设置请求头、使用Cookie等方面。通过实例演示和代码解析,帮助读者掌握构建高效、可靠的HTTP客户端的关键技术。
|
2月前
|
JSON 缓存 中间件
Go语言网络编程:深入探索HTTP服务器开发
【2月更文挑战第12天】本文将详细探讨使用Go语言开发HTTP服务器的过程,包括HTTP协议的理解、Go标准库中`net/http`包的使用、路由处理、中间件、静态文件服务、JSON处理以及性能优化等方面。通过本文,读者将能够掌握构建高效、可扩展HTTP服务器的关键技术。
|
9月前
|
网络协议 程序员 Go
GO语言使用之网络编程(TCP编程)
GO语言使用之网络编程(TCP编程)
68 0
|
5月前
|
数据采集 NoSQL 关系型数据库
Go语言网络爬虫工程经验分享:pholcus库演示抓取头条新闻的实例
网络爬虫是一种自动从互联网上获取数据的程序,它可以用于各种目的,如数据分析、信息检索、竞争情报等。网络爬虫的实现方式有很多,不同的编程语言和框架都有各自的优势和特点。在本文中,我将介绍一种使用Go语言和pholcus库的网络爬虫工程,以抓取头条新闻的数据为例,展示pholcus库的功能和用法。
580 0
Go语言网络爬虫工程经验分享:pholcus库演示抓取头条新闻的实例
|
6月前
|
网络协议 算法 Unix
GO的网络编程分享
GO的网络编程分享