UDP(User Datagram Protocol),用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,UDP传输的可靠性由应用层负责。
个人简单理解UDP 相对于TCP会丢失数据速度快应用于视频等数据可以包容丢失的情况1-1 UDP写服务端看注释,不需要解析
package mainimport ( "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", string(buffer[:n])) udpConn.WritetoUDP([]byte("朕以阅"), remoteAddr)}
1-2 UDP写客户端 package mainimport ( "fmt" "net" "os")func handleError(err error,正常退出为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 运行客户端和服务端的代码 先跑服务端代码
然后执行客户端
1-4 简单说明打印的数据来源 2. 发起http-GET请求
package mainimport ( "fmt" "io/IoUtil" "net/http" "os")func getError(err error,正常退出为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))}
3. 发起http-POST请求 package mainimport ( "fmt" "io/IoUtil" "net/http" "os" "strings")func postError(err error,正常退出为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))}
博主微信欢迎交流 总结 以上是内存溢出为你收集整理的【GO】入门级网络通信,一看就懂全部内容,希望文章能够帮你解决【GO】入门级网络通信,一看就懂所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)