【go语言udp分析】

news2024/11/15 11:20:36

go语言udp分析

  • server
  • client

udp相等于tcp来说是不可靠的协议,当然优点就是速度快,相对于包的首部来说比较小。然后接下来看一下对应的实现

server

package main

import (
	"fmt"
	"net"
)

// UDP服务端配置
func main() {
	//1:启动监听
	listener, err := net.ListenUDP("udp", &net.UDPAddr{
		IP:   net.ParseIP("127.0.0.1"),
		Port: 8888,
	})
	if err != nil {
		fmt.Println("启动server失败,err:", err)
		return
	}
	defer listener.Close()

	//获取连接数据
	for {
		var buf [1024]byte
		n, addr, err := listener.ReadFromUDP(buf[:])
		if err != nil {
			fmt.Println("读取失败,err:", err)
			return
		}
		//信息输出
		fmt.Printf("来自%v的消息:%v\n", addr, string(buf[:n]))
		//信息回复
		_, err = listener.WriteToUDP([]byte("hi"), addr)
		if err != nil {
			fmt.Println("回复信息失败,err:", err)
			return
		}
	}
}

这里是读取到消息之后,将消息重新写回去。

client

package main

import (
	"fmt"
	"net"
)

// UDP客户端配置
func main() {
	//1:连接服务器
	coon, err := net.Dial("udp", "127.0.0.1:8888")
	if err != nil {
		fmt.Println("连接失败,err:", err)
		return
	}
	defer coon.Close()
	//发送数据
	_, err = coon.Write([]byte("hello"))
	if err != nil {
		fmt.Println("发送信息失败,err:", err)
		return
	}
	//接收信息
	var buf [1024]byte
	n, err := coon.Read(buf[:])
	if err != nil {
		fmt.Println("接收信息失败,err:", err)
	}
	fmt.Println("接收消息:", string(buf[:n]))
}

这里是发送数据,然后再接收数据。

接下来结合抓包的结果看一下,udp的抓包表现
在这里插入图片描述
可以看出来这里的首部相对tcp少了很多,有
Source Port: 41831 //请求方端口:53738
Destination Port: 8080 //服务器端口:8888
Length: 23 //长度:20
Checksum: 0xfe20 [unverified] //校验和
[checksum Status: Unverified] //校验状态
[Stream index: 0] //流序号:0

可以看出来udp的头部很少,总共只有8个字节。
在这里插入图片描述
而且对于udp来说,是面向报文的,并不是面向连接的。从源码中也可以看出来,在bind之后,没有进行accept去等待新的连接。而且将报文写完之后就结束了操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年中高级前端养成指南-需要关注和学习的13大类80余个前端技术栈与前端趋势-看这篇就够了系列

今天是兔年开工的第一个星期一,我们又要投入到忙碌的工作了。 以下是imqdcn研究整理的2023年中高级前端养成指南,收藏起来,从开工第一天起,立下全新的计划和目标,愿你在兔年大展宏兔,扬眉兔气。 文章目录一…

【SpringCloud】Sentinel的基础概念及使用

一、雪崩问题1.问题描述微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时,其它不依赖于服务I的业务似乎不…

SAP 实施新的金融工具 IFRS17规则解析

在实施新的金融工具 IFRS 规则的过程中,保险公司现在看到了保险负债的新标准。经过多年的长期讨论,IASB 于 2016 年 11 月承诺在 2021 年 1 月 1 日生效,并明确表示不会考虑进一步推迟法规的通过日期。由于有必要将 2020 年作为比较期&#x…

[思考进阶]05 人与人之间的差距,在于“自律”

除了要提升自己的技术能力,思维的学习和成长也非常非常重要,特推出此[思考进阶]系列,进行刻意练习,从而提升自己的认知。 我认识两个成功的长者。 其中有一个人,每天记录当天的重要事项,比如今天和谁签了什…

英语学习 1

1 词汇积累 1、evolution 进化、发展 2、work efficiency 工作效率 3、material 物质的、非精神上的 4、mental 精神的 5、concern 担忧 6、physical contact 身体接触 7、imply 暗示 8、interpersonal relationships 人际关系 9、indifference 漠不关心 10、depression 抑郁 …

【八大数据排序法】冒泡排序法的图形理解和案例实现 | C++

第十四章 冒泡排序法 目录 第十四章 冒泡排序法 ●前言 ●认识排序 ●一、冒泡排序是什么? 1.简要介绍 2.具体情况 3.算法分析 ●二、案例实现 1.案例一 2.案例二 ●总结 前言 排序算法是我们在程序设计中经常见到和使用的一种算法,它…

在线支付系列【10】微信支付接入前准备

有道无术,术尚可求,有术无道,止于术。 文章目录前言1. 获取基本参数商户号(mchid)应用ID(appid)绑定商户号和应用ID2. 配置API v3密钥3. 下载并配置商户API证书3.1 简介3.2 生成证书串3.3 获得商…

卷积神经网络CNN :1.基础知识

​卷积神经网络是一种深度学习概念,专为处理图像而构建。机器学习是计算机从过去的经验中学习的概念。深度学习是机器学习的高级部分。CNN 旨在寻找视觉模式。 当我们人类看到图像时,我们看到物体、颜色等。我们在成长过程中学习这些东西,但计…

CRPS:贝叶斯机器学习模型的评分函数

连续分级概率评分(Continuous Ranked Probability Score, CRPS)或“连续概率排位分数”是一个函数或统计量,可以将分布预测与真实值进行比较。 机器学习工作流程的一个重要部分是模型评估。这个过程本身可以被认为是常识:将数据分…

【CLYZ集训】变量取值【网络流】

思路: 容易把答案转化为∑siwi∑ti(wx−wy)\sum{s_iw_i}\sum{t_i(w_x-w_y)}∑si​wi​∑ti​(wx​−wy​),然后我们设初始代价为−∑∣si∣wi-\sum{|s_i|w_i}−∑∣si​∣wi​,然后考虑建模。 如果Si大于0,则源点向i连一条流量为2…

【Java AWT 图形界面编程】FileDialog 对话框 ( 打开文件 | 保存文件 | 构造函数 | 获取文件路径 | 获取文件名称 | 代码示例 )

文章目录一、FileDialog 对话框1、构造函数2、获取文件路径3、获取文件名称二、FileDialog 对话框代码示例一、FileDialog 对话框 在开发时 , 经常遇到文件相关操作 , 如 : 选择文件 , 保存文件 等 , 在 AWT 中使用 FileDialog 文件对话框 实现上述功能 ; 1、构造函数 FileDial…

量子计算初创公司Oxford Ionics完成3000万英镑A轮融资

(图片来源:网络)未来,量子计算机会解决世界上最大的超级计算机无法解决的问题。然而,大规模制造量子计算机仍然是一个巨大的挑战。英国量子计算初创公司Oxford IonicsA轮融资获得的3000万英镑(约合人民币2.…

Java集合(六)Set接口和常用方法

Set接口基本介绍: (1)无序(添加和取出的顺序不一致),没有索引 (2)不允许重复元素,所以最多包含一个null (3)JDK API中Set接口的实现类有: 其中set接口的已…

2023年,最新最权威的上海Java培训机构排行榜出炉!

2022也许你的很多学习和工作计划都被打乱,但是过去的2022不管多艰难,多难熬。都已经成为过去式。2023悄然而至,新的一年,你我都该有新气象新动力,学习什么时候开始都不晚,想跨行从事软件开发、IT行业的小伙…

跳槽至今0 offer的大冤种,问题到底出在哪儿?

众所周知,2022年市场很难!看着企业们纷纷裁员,甚至连内推这个后门都走不通!哪怕有面试,都是屡屡碰壁,你想清楚问题出在哪了吗?😭“求职不得,夜不能寐;三更半夜…

C++基础——C++ 指针

C基础——C 指针C 指针什么是指针?C 中使用指针C 指针详解C Null 指针C 指针的算术运算递增一个指针递减一个指针指针的比较C 指针 vs 数组C 指向指针的指针(多级间接寻址)C 传递指针给函数C 指针 学习 C 的指针既简单又有趣。通过指针&…

Python语言基础学习之Python基础之列表介绍和循环遍历

今天给大家分享一些Python基础 (列表基础和循环遍历介绍),一起来看看吧~ 一、列表介绍 想一想: 字符串可以用来存储一串信息,那么想一想,怎样存储所有同学的名字呢?定义100个变量,每个变量存放一个学生的姓名可行吗…

LinkedList VS ArrayList~

ArrayList VS LinkedList: One: ArrayList:基于数组,需要连续内存LinkedList:基于双向链表,无需连续内存Two: ArrayList:随机访问快(指根据下标访问)LinkedList:随机访问慢(要沿着链表遍历)点击ArrayList的源码: 点击LinkedList的源码: Ar…

九龙证券|看好2-4月份汽车月度销量增速的逐月改善

机构指出,考虑到22年末购置税补助等方针到期,叠加春节假期消费需求的提早,估计年内乘用车销量绝对值及同比增速均于1月触底,后续方针影响、消费回暖等一期效果下,看好车市回暖,估计销量增速将于2-4月逐月回…

15.Set系列,可变参数、Collections

目录 一.Set系列 1.1 Set系列集合特点 1.2 Set集合实现类特点 1.3 HashSet 1.3.1 特点 1.3.2 优点 1.3.3 在理解原理之前要知道的几个概念。 1.3.4 底层原理 1.3.5 哈希表的形成过程/元素的存入过程(Jdk8的版本) 1.3.6 注意事项 1.4 linkedHa…