Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-创建;广播员;_Java_Broadcast_Broadcasting - Fatal编程技术网

Java-创建;广播员;

Java-创建;广播员;,java,broadcast,broadcasting,Java,Broadcast,Broadcasting,我注意到路由器如何在一个区域内发送广播数据包,以允许无线网络连接,从而实现网络访问。 我的问题是我们如何在java中实现这样的东西?我知道如何实现“UDP广播”,但这并不是我想要的广播类型 import java.net.*; class Broadcast{ //Example of UDP Broadcast Server public static void main(String[] args){ DatagramSocket broadcastserve

我注意到路由器如何在一个区域内发送广播数据包,以允许无线网络连接,从而实现网络访问。 我的问题是我们如何在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广播可以实现的端口上的广播不同,我们如何在区域内进行广播,就像路由器可以做的那样。

如果您指的是原始以太网广播,那么纯Java无法做到这一点。 (顺便问一句,你的问题是重复的吗:)

对于原始套接字,一种直接的方法(如果您知道将在哪个平台上执行)是直接在本机代码中执行,并与Java系统的其余部分有一个合适的接口

一个更复杂的选项是将本机代码包装到java.net.Socket的子类中,这为代码的其余部分提供了一个标准接口,但可能会很棘手,这取决于您想要实现的Socket接口的数量,以及您能够承受多少依赖于寻址约定的费用,以及调用代码是否正确

第三种选择是使用现有的原始以太网库,参见。 答案

有关打开原始套接字的权限的简要讨论,请参阅,例如。,

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

首先,Wikipedia关于以太网帧的文章很好地介绍了协议:

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

对于Python编程,我得到的“原始以太网Python”的前3个google结果是

这似乎是一个合理的起点

更全面一点的文章,
可能值得一读。

非常感谢!我想知道您是否可以解释更多关于以太网编程和原始套接字的内容,以及如何用其他语言(如Python)实现这一点。答案更新了一些指针。为此,谷歌是你的朋友。