小编Jos*_*osh的帖子

Java查找默认网关的网络接口

在Java中,我想找到与所使用的接口相对应的java.net.NetworkInterface到达默认网关.接口的名称等不是提前知道的.

换句话说,如果以下是我的路由表,我希望接口对应"bond0":

$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.10.10.0     *               255.255.255.0   U         0 0          0 bond0
10.10.11.0     *               255.255.255.0   U         0 0          0 eth2
10.10.11.0     *               255.255.255.0   U         0 0          0 eth3
10.10.12.0     *               255.255.255.0   U         0 0          0 eth4
10.10.13.0     *               255.255.255.0   U         0 0          0 eth5
default         mygateway      0.0.0.0         UG        0 0          0 bond0
Run Code Online (Sandbox Code Playgroud)

做了一些谷歌搜索后,我仍然没有找到任何答案.

编辑:
java运行时必须"知道"如何获取此信息(并不是说它已暴露).当使用join(InetAddress grpAddr)调用(未指定接口)将java.net.MulticastSocket连接到多播组时,明显的行为似乎是在"默认"接口上加入(如上所述).即使默认的intf不是路由表中列出的第一个接口,这也可以工作.但是,加入mcast组的基础POSIX调用需要此信息!:

struct ip_mreqn group;
group.imr_multiaddr = ...
group.imr_address = **address of the …
Run Code Online (Sandbox Code Playgroud)

java routing network-programming

7
推荐指数
2
解决办法
7260
查看次数

采用任何切片的Express函数

我想表达一个可以采取任何切片的函数.我以为我可以这样做:

func myFunc(list []interface{}) {
  for _, i := range list {
    ...
    some_other_fun(i)
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

some_other_fun(..)本身就是一种interface{}类型.然而,这并不能工作,因为你无法通过[]DEFINITE_TYPE[]interface{}.请参阅:https://golang.org/doc/faq#convert_slice_of_interface,其中指出[]接口{}的表示形式不同.这个答案总结了为什么,但是关于接口指针而不是接口切片,但原因是相同的:为什么我不能将*Struct分配给*接口?.

上面golang.org链接中提供的建议建议从DEFINITE_TYPE切片重建新的接口切片.但是,在我想要调用此函数的代码中到处都是不实际的(这个函数本身只是缩写9行代码,但是这9行在我们的代码中经常出现).

在我想要调用函数的每种情况下,我都会传递一个[]*DEFINITE_TYPE我最初认为更容易抽象的东西,直到我再次发现为什么我不能为*接口分配*Struct?(也在上面链接).

此外,每次我想调用它的功能都是不同的,DEFINITE_TYPE因此实现n个类型的n个示例不会为我节省任何代码行或使我的代码更清晰(恰恰相反!).

令人沮丧的是,我无法做到这一点,因为我们的代码中的9行是惯用的,而错误的类型很容易引入错误.我真的错过了泛型.有没有办法做到这一点?!!

types go

3
推荐指数
2
解决办法
1339
查看次数

标签 统计

go ×1

java ×1

network-programming ×1

routing ×1

types ×1