Java - 创建" BroadCaster"

时间:2015-03-31 08:51:59

标签: java broadcast broadcasting

我注意到路由器如何在区域内发送广播数据包,以允许无线网络连接,从而实现网络访问。 我的问题是我们如何在java中实现这样的东西?我知道如何“UDP广播”,但这不是我想要做的广播类型。

import java.net.*;

class Broadcast{ //Example of UDP Broadcast Server
     public static void main(String[] args){
          DatagramSocket broadcastserver = new DatagramSocket(80);
          broadcastserver.setBroadcast(true);
          ...
          ...

总之,如何在UDP广播等端口上实现广播,而不是像路由器那样在区域内进行广播。

1 个答案:

答案 0 :(得分:2)

如果您的意思是原始以太网广播,则无法通过纯Java实现这一点。 (顺便说一句,你的问题与此重复:How can I read or get the information of the beacon frame that sent by the Access point in WLAN, by java or Android?

对于原始套接字,一种直接的方式(如果您知道将要执行的平台)是直接在本机代码中执行,并使用适当的接口连接到Java系统的其余部分。

更复杂的选项是将子类中的本机代码包装到java.net.Socket中,这为代码的其余部分提供了标准接口,但可能很棘手,具体取决于您要实现多少Socket接口,以及你可以负担多少依靠会议来进行寻址以及调用代码是否正确。

第三种选择是将现有库用于原始以太网,参见例如

的答案

有关打开原始套接字的权限的简短讨论,请参阅,例如, send/receiving raw ethernet frames

更新:关于以太网(编程)的更多详细信息:评论中的问题。

首先,关于以太网框架的维基百科文章是对协议的一个很好的介绍:http://en.wikipedia.org/wiki/Ethernet_frame

关于编程,无聊的答案是从socket(2)的手册页开始阅读有关SOCK_RAW的内容。创建一个原始套接字后,基本上创建一个框架(作为字节数组)并使用write(2)或sendto(2)发送它,并使用read(2)或recvfrom(2)读取。使用维基百科文章在创建以太网帧时正确获取格式。

对于Python编程,我得到的“原始以太网python”的前3个谷歌搜索结果是

这似乎是一个合理的起点。

有关更全面的文章, http://www.binarytides.com/python-packet-sniffer-code-linux/可能值得一读。