【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

相关文章
|
数据采集 监控 安全
Go语言在网络安全中的应用
【2月更文挑战第24天】Go语言,作为一种高效且易于维护的编程语言,近年来在网络安全领域得到了广泛的应用。本文旨在探讨Go语言在网络安全中的应用,包括其在防火墙、入侵检测、网络爬虫以及Web安全等方面的应用,并分析了Go语言在网络安全领域的优势与前景。
|
4月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
259 61
|
3月前
|
监控 安全 Go
使用Go语言构建网络IP层安全防护
在Go语言中构建网络IP层安全防护是一项需求明确的任务,考虑到高性能、并发和跨平台的优势,Go是构建此类安全系统的合适选择。通过紧密遵循上述步骤并结合最佳实践,可以构建一个强大的网络防护系统,以保障数字环境的安全完整。
92 12
|
4月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
4月前
|
运维 网络协议 Go
Go网络编程:基于TCP的网络服务端与客户端
本文介绍了使用 Go 语言的 `net` 包开发 TCP 网络服务的基础与进阶内容。首先简述了 TCP 协议的基本概念和通信流程,接着详细讲解了服务端与客户端的开发步骤,并提供了简单回显服务的示例代码。同时,文章探讨了服务端并发处理连接的方法,以及粘包/拆包、异常检测、超时控制等进阶技巧。最后通过群聊服务端的实战案例巩固知识点,并总结了 TCP 在高可靠性场景中的优势及 Go 并发模型带来的便利性。
|
8月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
206 20
|
8月前
|
网络协议 算法 安全
Go语言的网络编程与TCP_UDP
Go语言由Google开发,旨在简单、高效和可扩展。本文深入探讨Go语言的网络编程,涵盖TCP/UDP的基本概念、核心算法(如滑动窗口、流量控制等)、最佳实践及应用场景。通过代码示例展示了TCP和UDP的实现,并讨论了其在HTTP、DNS等协议中的应用。最后,总结了Go语言网络编程的未来发展趋势与挑战,推荐了相关工具和资源。
214 5
|
11月前
|
安全 网络协议 Go
Go语言网络编程
【10月更文挑战第28天】Go语言网络编程
278 65
|
8月前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
185 0
|
11月前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
198 13

热门文章

最新文章