我有一些现有的C代码使用ICMP原始套接字来执行Ping,我需要在Java中使用此代码,因为Java不支持ICMP包.当我在JNI中包装代码并调用它时,C代码在执行以下操作时无法获取套接字:
socket(AF_INET,SOCK_RAW,1);
我猜Java已经删除了一些禁用Java进程中使用原始套接字的权限.我必须找到解决方案.
我观察到以下情况:
这意味着我可以通过选择这两种策略中的一种来解决我的问题,但我也不喜欢.有没有其他方法可以让Java接受JNI代码打开这个套接字?
编辑:我越是关注这个问题,我认为它必须与Windows 7的启动方式有关.
看起来如果你让Windows运行起来,或者你在Windows以外的其他平台上,也可以使用InetAddress.isReachable()方法.
我正在寻找好的工具来支持改变REST服务中使用的模型版本的支持.我的梦想工具会做如下:
在我的特定情况下,我不需要进行反向转换,因为我的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:我已经找到了可能有助于这个过程的工具,但仍然没有任何能够以良好的方式与休息相关联的工具.这是我到目前为止找到的链接: