加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

最好的方式来做涉及Java的RAW套接字编程

发布时间:2020-12-14 16:40:27 所属栏目:Java 来源:网络整理
导读:我有一些现有的C代码,使用ICMP原始套接字做Ping,我需要在 Java中使用这个代码,因为 Java不支持ICMP包.当我在JNI中包装代码并调用它时,C代码在执行时无法获取套接字: 套接字(AF_INET,SOCK_RAW,1); 我猜Java已经放弃了一些禁止Java进程使用原始套接字的特权.
我有一些现有的C代码,使用ICMP原始套接字做Ping,我需要在 Java中使用这个代码,因为 Java不支持ICMP包.当我在JNI中包装代码并调用它时,C代码在执行时无法获取套接字:

套接字(AF_INET,SOCK_RAW,1);

我猜Java已经放弃了一些禁止Java进程使用原始套接字的特权.我必须找到一个解决方案.

我观察到以下情况:

>如果我编写一个C程序,并从Java中使用运行时调用,那么分叉代码可能会打开套接字.
>如果我从Eclipse运行这个本机代码,它也运行良好.我想这是因为Eclipse已经从eclipse.exe启动,而不是从java.exe启动.

这意味着我可以通过选择这两个策略之一解决我的问题,但是我也不喜欢.有没有其他方法可以让Java接受JNI代码打开这个套接字?

编辑:
我看到这个问题越多,我认为它必须是一个Windows 7相关的问题,如何开始Java.

看起来,如果你得到窗口的行为,或者如果你在一些其他平台比Windows,也可以使用InetAddress.isReachable()方法.

解决方法

也许使用现有的Java本机套接字库?那么你不必担心编码JNI lib.

见:http://www.savarese.com/software/rocksaw/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读