Go如何发送广播包

Go如何发送广播包

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

发送网络数据包成三种方式,每间单播、组播、广播


广播通俗地讲,就是让你的机器发送的数据包能够被同一个网络内的全部主机都接收到。


在解说怎样发送广播包之前。先来看看跟广播有关的知识:

我们都知道IP地址的作用是用来在网络中定位某个网络接口的(没错,准确的讲。IP并非定位某一台主机)。

我们通常见到的IP地址的形式都是例如以下这样子的:

                    XXX.XXX.XXX.XXX

这样的IP地址的形式叫做点分十进制表示法,事实上IP是一个32位长的二进制数,以每8位为单位,共分成4个部分。也就是分成了4个字节。


IP地址的组成方式是:  [网络号]+[主机号]

网络号是用来标识某个网络的,而主机号是用来标识网络中的某一台主机的(事实上是主机上的某个接口)。


通常计算机发送一个数据包时会在数据包的头部加上发送者的IP地址。和接收者的IP地址。

可是一般计算机发送数据包的时候,同一个网络内的全部主机都会收到这个数据包,可是仅仅有那个自己的IP地址和数据包中的接收者的IP地址同样的那个计算机才会真正接收这个数据包。

假设要让网络(同一网络)中的全部计算机都能收到这个数据包。就应该将这个数据包的接收者地址设置为这个网络中的最高的主机号。通常255.255.255.255就能够达到这个要求。所以我们假设要发送一次UDP广播报文,就能够试试例如以下实例代码:

package main

import "net"

func main() {
	// 这里设置发送者的IP地址,自己查看一下自己的IP自行设定
	laddr := net.UDPAddr{
		IP:   net.IPv4(192, 168, 137, 224),
		Port: 3000,
	}
	// 这里设置接收者的IP地址为广播地址
	raddr := net.UDPAddr{
		IP:   net.IPv4(255, 255, 255, 255),
		Port: 3000,
	}
	conn, err := net.DialUDP("udp", &laddr, &raddr)
	if err != nil {
		println(err.Error())
		return
	}
	conn.Write([]byte(`hello peers`))
	conn.Close()
}


打开WireShark,设定过滤规则为udp.port == 3000, 然后运行一下程序。就能够抓到我们发送的广播包了:

Go如何发送广播包


假设转载请注明出处:http://blog.csdn.net/gophers


版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117378.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • (转)C# Assembly.Load 使用

    (转)C# Assembly.Load 使用在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系:在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系:System.Reflection命名空间(1)AppDoma

    2022年7月1日
    20
  • sealed java_Java语言的新密封Sealed类型简介 – Ben Evans

    sealed java_Java语言的新密封Sealed类型简介 – Ben Evans密封 Sealed 表示的概念是可以扩展一个类 但只能通过已知的子类型列表进行扩展 而不能通过其他任何扩展 其他语言可能对功能的看法有所不同 但是在 Java 中 应将其视为代表 几乎最终的 类的功能 让我们来看一个简单示例的新语法的当前版本 publicabstra Dog protectedfin

    2026年2月4日
    0
  • [New Portal]Windows Azure Web Site (3) 创建Web Site和云端数据库[通俗易懂]

    [New Portal]Windows Azure Web Site (3) 创建Web Site和云端数据库[通俗易懂][New Portal]Windows Azure Web Site (3) 创建Web Site和云端数据库

    2022年4月21日
    54
  • STM32F103参考手册_stm32f103 422

    STM32F103参考手册_stm32f103 422个人觉得,资源取于外,就应该分享。所以以下百度网盘的链接是关于stm32f103数据手册,参考手册等等资料!链接:https://pan.baidu.com/s/1fY8ggZi2Q-z1pvo0xk0bow提取码:cj40这个链接是stm32驱动方面的等等东西,都放在这个链接下了链接:https://pan.baidu.com/s/12mRgh_PaPOG6Yd9G21sxbA提取码:1hzf……

    2022年10月15日
    3
  • Java中关于守护线程_守护线程和主线程

    Java中关于守护线程_守护线程和主线程在Java中有两类线程:UserThread(用户线程)、DaemonThread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆:只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是

    2022年10月16日
    3
  • Opencv 中 waitkey()& 0xFF,“0xFF”的作用解释

    Opencv 中 waitkey()& 0xFF,“0xFF”的作用解释这几日学习OpenCV,刚碰到这个表达式时,对于0xFF的作用不太理解,难道下面两个语句还有区别?(Esc的ASCII码为27,即判断是否按下esc键)ifcv2.waitkey(30)==27ifcv2.waitkey(30)&0xff==27疑惑首先&运算即“and”运算。其次0xFF是16进制数,对应的二进制数为11111111。然后cv2….

    2022年6月19日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号