Golang UDP IPV6 编程

news2024/11/25 3:07:13

一、网络通信的步骤

服务端

1.socket()  
 创建通信的套接字socket:ip:addr
2.bind() 
 将套接字绑定监听的地址和端口号,作用是:服务器一般有很多网卡,多个IP地址,bind指定具体监听  哪一个IP地址及对应的端口号(若服务器有3个网卡,192.168.66.1,192.168.66.2,192.168.66.3,bind绑定的是192.168.66.3,那当且仅当客户端请求发送给192.168.66.3时才能被监听到,并进行请求的处理)。
**全0的IP地址表示监听所有网卡的请求,无论请求的是哪一个IP都能连接上**
**0端口是一种由系统指定动态生成的端口。也即是说,监听端口0,系统会自动重新分配一个系统空闲的端口**
3.listen()
 使用上面创建的套接字循环监听bind上IP到来的请求(两个队列)
4.accept() 
 请求到来时,accpet复制该套接字的请求进行处理。

客户端

1.socket() 
 创建套接字
2.connect() (可选)
 使用上面的套接字连接服务端IP和port,进行通信
**UDP通信不需要客户端建立连接,因此不需要connect**

二、TCP通信步骤

三、UDP通信步骤和示例

在这里插入图片描述

四、golang UDP IPV6通信代码及测试

参考博客
https://blog.csdn.net/weixin_45477086/article/details/122901328

以下测试均为全局单播地址,本地链路地址的UDP通信还需测试(是否需要zone)

1.客户端

代码

// 客户端向服务端:端口发送数据
func UDPIPV6Client(IP string, p ort int) {

   //1.创建要访问的服务端地址
	serverAddr := &net.UDPAddr{IP: net.ParseIP(IP), Port: port}
	
	//2.创建和服务器的连接
	conn, err := net.DialUDP("udp", nil, serverAddr)
	if err != nil {
		fmt.Println("net.DialUDP failed,err:", err.Error())
		return
	}
	defer conn.Close()
	
	//3.发送数据
	conn.Write([]byte("hello"))
	fmt.Println("conn.Write data:hello")
	
	//4.接收数据
	buf := make([]byte, 1024)
	conn.Read(buf)
	fmt.Println("conn read data:", buf)

}

测试:本地模拟服务端测试客户端代码

工具:nc(netCat)(centos安装nc:yum install nc -y)
测试方法:
(1)centos模拟本地服务器:centos终端输入 nc -6lup 666
(2) 运行客户端代码

2.服务端

代码

//服务端向客户端:端口发送并读取数据
func UDPIPV6Server(ip string, port int) {

	//1.创建监听地址  IPv4服务器和IPV6客户端
	srcAddr := &net.UDPAddr{IP: net.IPv6zero, Port: 0}
	
	//2.进行监听
	conn, err := net.ListenUDP("udp", srcAddr)
	if err != nil {
		fmt.Println("net.ListenUDP failed,err:", err.Error())
		return
	}
	defer conn.Close()
	
	//3.写数据  本地模拟一个客户端,向1234端口发送数据
	dstAddr := &net.UDPAddr{IP: net.ParseIP(ip), Port: port}
	conn.WriteToUDP([]byte("hello"), dstAddr)
	fmt.Println("writeToUDP data: hello")
	
	//4.读数据
	data := make([]byte, 5125)
	if _, _, err = conn.ReadFromUDP(data); err != nil {
		fmt.Println("readFromUDP failed ,err:", err.Error())
		return
	}
	fmt.Println("readFromUDP data:", data)
}

测试:centos客户端测试服务端代码

工具:nc(netCat,telnet可以模拟客户端,但只能进行TCP测试)
系统:centos 以IPV6地址互相联通,配置方法;
测试方法:
(1)centos模拟本地客户端:centos终端输入:nc -6lup 777
(2) 另一台运行服务端代码 ,进行数据发送

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

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

相关文章

消防应急物资智能仓储管理系统

一,项目背景消防应急物资装备管理系统(智装备 DW-S302)是一套成熟系统,依托互 3D 技术、云计算、大数据、RFID 技术、数据库技术、AI、视频分析技术对 RFID 智能仓库进行统管理、分析的信息化、智能化、规范化的系统。基于物联网技术,实现装备…

win10录屏快捷键是什么?录屏快捷键怎么设置

录屏是我们在学习和工作,经常会使用得到的工具。不管是录制网课视频,还是录制线上办公会议,都可以使用得上。在win10电脑系统中,就有录屏的功能,还自带了录屏快捷键。那win10录屏快捷键是什么?今天就给大家…

通过SwitchyOmega插件实现Chrome的PAC模式代理网络连接

通过SwitchyOmega插件实现Chrome的PAC模式代理网络连接 文章目录通过SwitchyOmega插件实现Chrome的PAC模式代理网络连接SwitchyOmega的安装PAC脚本示例示例 1:如果主机是本地主机,则直接连接示例 2:如果主机在防火墙内部,则直接连…

华为云、阿里云、腾讯云、百度云、浪潮云、金山云-云计算能力横向对比

导读 近些年,各大公司和码农们对云服务需求日益增长,大家不断在问“做云服务和物联网服务器的到底哪家强?”。网上也有不少人给出简单的答案,“明显是腾讯云,华为云的应用还没那么广泛,目前最好的有三个&am…

SpringBoot统一功能处理实现

⭐️前言⭐️ 这篇文章主要介绍Spring Boot的统一功能处理模块,也是AOP的实战环节。 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论…

ORB-SLAM2 --- KeyFrameDatabase::DetectLoopCandidates函数

目录 1.函数作用 2.函数流程 3.函数解析 3.1 传入参数解析 3.2 找出和当前帧具有公共单词的所有关键帧,不包括与当前帧连接的关键帧 3.3 统计上述所有闭环候选帧lKFsSharingWords中与当前帧具有共同单词最多的单词数,用来决定相对阈值 3.4 遍…

java基于ssm的图书管理系统图书借阅管理网站图书管理网站源码

简介 本项目是图书借阅管理系统,主要实现了对图书的管理和借阅。 演示视频 https://www.bilibili.com/video/BV14p4y1H7GQ/?share_sourcecopy_web&vd_sourceed0f04fbb713154db5cc611225d92156 技术 ssmjqueryajaxmysql 角色 管理员学生 功能 管理员&am…

带着刚刷题的你一步步学会刷题:989. 数组形式的整数加法

这是一道很经典的题目啊,考的就是数字数组转换,思路不难,但是在写的时候一步一步改代码,去优化复杂度,也是有助于学习的,今天刷了一下,也分享出来,建议刚开始刷题的友友们可以做一做…

【 java 集合】Map 接口常用实现类对比

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

P9 PyTorch 导数,偏微分,梯度

参考: 多元函数的偏导数、方向导数、梯度以及微分之间的关系思考 - 知乎 关于梯度下降与Momentum通俗易懂的解释_ssswill的博客-CSDN博客_有momentum之后还要梯度剪裁吗 前言: 这里简单了解一下 导数 梯度 微分的概念。 在前面矩阵求导术里面介绍过 梯…

表格控件DHTMLX Spreadsheet 5.0版本重大更新,新增搜索和过滤数据、合并单元格、自动宽度功能

DHTMLX Spreadsheet是用纯JavaScript编写的开源电子表格小部件,可让您快速在网页上添加类似于Excel的可编辑数据表。高度可定制的JavaScript电子表格组件,具有优雅的Material样式,可安全、方便地编辑和格式化数据。本文给大家讲解DHTMLX Gant…

4种大文件传输工具和软件,用于共享大文件

无论是个人还是与团队一起工作,大文件传输软件和网站都能协助提高工作效率、有效地管理工作内容。疫情原因有时我们不得不居家办公,在这种情况下可以分享文件的工具就显得尤为重要。 每个公司都需要一个文件传输软件,让员工可以上传和分享他…

【华为机试真题详解】不含 101 的数(二)【2022 Q4 | 100分】

文章目录 前言题目解析参考代码前言 《华为机试真题详解 Python实现》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优),不能保证通过…

Docker 从入门到精通

目录 一、安装Docker 1. 安装必要的包 2. 设置镜像的仓库 3. 更新软件包的索引 4. 安装docker 5. 启动docker 6. 测试 hello-world 7. 查看的hello-world镜像 8. 卸载docker 9. 配置阿里云镜像加速 二、Docker 常用命令 镜像命令 (1)docker …

4.2 集成运放中的电流源电路

集成运放电路中的晶体管和场效应管,除了作为放大管外,还构成电流源电路,为各级提供合适的静态电流;或作为有源负载取代高阻值的电阻,从而提高放大电路的放大能力。 一、基本电流源电路 1、镜像电流源 图4.2.1所示为…

SAP FICO 内部订单解析

内部订单提供成本控制和短期的工作与任务的监测。内部订单通常被用于内部工作和任务的计划、信息收集和成本清算等等,如市场营销活动和工作修复等。成本中心用于长期成本管理,而内部订单则用于中短期的成本征收。整个订单生命周期过程(从订单…

mysqldump命令备份数据库数据

#MySQLdump常用 mysqldump -u root -p --databases 数据库1 数据库2 > xxx.sql备份全部数据库的数据和结构mysqldump -u root -hlocalhost -p123456 -A > /data/mysqlDump/mydb.sql备份全部数据库的结构(加-d参数)mysqldump -u root -hlocalhost -p123456 -A -d > /da…

【测试】Bug篇

努力经营当下,直至未来明朗! 文章目录一. 如何创建Bug二.Bug的级别三.Bug的生命周期四.跟开发起争执怎么办【高频面试题】:sparkles:小结普通小孩也要热爱生活! 一. 如何创建Bug 创建Bug的要素&#xff1…

逻辑卷管理器:PV、PE、VG、LV

LVM:Logical Volume Manager,逻辑卷管理器。重点:可以弹性的调整文件系统的容量,而不在于性能和数据安全上面,因此如果强调性能和备份,那么直接使用raid即可,不需要用到LVM。 LVM可以整合多个物…

利用VNC远程连接Ubuntu server(图形界面)

有时会需要远程连上ubuntu server图形界面控制调试,这时VNC就是一个挺好的工具, windows 上安装 vnc viewer , ubuntu server 上安装vnc server 进行连接即可 一、ubuntu 安装vnc server 1.sudo apt-get install vnc4server 2.修改vnc pwd …