小编Knu*_*ubo的帖子

执行涉及Java的RAW套接字编程的最佳方法

我有一些现有的C代码使用ICMP原始套接字来执行Ping,我需要在Java中使用此代码,因为Java不支持ICMP包.当我在JNI中包装代码并调用它时,C代码在执行以下操作时无法获取套接字:

socket(AF_INET,SOCK_RAW,1);

我猜Java已经删除了一些禁用Java进程中使用原始套接字的权限.我必须找到解决方案.

我观察到以下情况:

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

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

编辑:我越是关注这个问题,我认为它必须与Windows 7的启动方式有关.

看起来如果你让Windows运行起来,或者你在Windows以外的其他平台上,也可以使用InetAddress.isReachable()方法.

c java networking java-native-interface

11
推荐指数
1
解决办法
1万
查看次数

用于Java版本的REST模型的好工具

我正在寻找好的工具来支持改变REST服务中使用的模型版本的支持.我的梦想工具会做如下:

  • 我的pojo +版本1.0 config/transformer =>我的模型1.0的服务可用
  • 我的pojo +版本1.1 config/transformer =>服务可用1.1我的模型

在我的特定情况下,我不需要进行反向转换,因为我的REST服务只提供数据查找而从不存储东西,但我不介意使用两种工具:-)

我正在考虑的解决方案是在我的pojo(版本+名称)中添加自定义注释,并根据版本号创建一个基于我的pojo生成JSON/XML的代码生成器.虽然在这里我觉得我正在重新发明轮子.

编辑:以下是可以从版本1到版本1.1进行更改的示例:

版本1:人名字姓

版本1.1人名firstname birthdate

如果您使用版本1.0访问API,则不会获得birthdate属性 - 它仅在1.1版中可用.我想要工具支持使这些服务可用,在那里我可以配置授予我的pojo(目前是1.1版本),我想提供一个不显示这些值的1.0版本.

对模型的其他合法更改可能是删除属性或重命名属性(甚至重命名实体).

编辑2:数字Joel在评论中提到,关于API版本化的讨论,您应该阅读https://stackoverflow.com/posts/9789756/.

版本控制的简单方法是不要进行向后突破的API更改,而是改变业务,因此这并不总是可行的.我的兴趣在于如何使这些变化更容易处理,因此我的问题.

编辑3:我已经找到了可能有助于这个过程的工具,但仍然没有任何能够以良好的方式与休息相关联的工具.这是我到目前为止找到的链接:

java rest data-migration model

9
推荐指数
1
解决办法
2818
查看次数