强制ServerSocket使用IPv4

时间:2018-11-30 15:02:37

标签: java ipv6 serversocket ipv4 netstat

我无法让new ServerSocket(11000, queueLimit, InetAddress.getByName("0.0.0.0")使用IPv4代替IPv6,这似乎是系统上的默认行为。

跑步 ➜ ~ netstat -an | grep 11000 tcp46 0 0 *.11000 *.* LISTEN ➜ ~ lsof -i :11000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 2845 myuser 383u IPv6 0x5ba3bfaea6c7372d 0t0 TCP *:irisa (LISTEN) 将导致

-Djava.net.preferIPv4Stack=true

您会注意到,即使我在创建ServerSocket时指定了“ 0.0.0.0” IPv4地址,我们监听端口11000的地址也是一个IPv6地址。

另一方面,如果我在vm选项上指定➜ ~ netstat -an | grep 11000 tcp4 0 0 *.11000 *.* LISTEN ➜ ~ lsof -i :11000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME java 3628 myuser 384u IPv4 0x5ba3bfaeaafaa08d 0t0 TCP *:irisa (LISTEN) ,则会得到以下情形。

ServerSocket

您现在可以注意到我现在正确地侦听了IPv4地址上的端口11000,这是我想要的,但是我只能通过发送特定的vm选项来实现此解决方案。

打开Dim N As Long Dim wsName As String > > For N = 1 To ThisWorkbook.Sheets.Count > wsName = ThisWorkbook.Worksheets(N).Name > > If Len(wsName) = 3 Then > > wsName.Range("$A$1:$XFC$104").AutoFilter Field:=12, Criteria1:=">=365" _ > , Operator:=xlAnd > wsName.Range("$A$1:$XFC$104").AutoFilter Field:=17, Criteria1:=">100" _ > , Operator:=xlAnd > > Else 'Do Nothing > End If Next N 时,如何可靠地确定可以听哪个IP堆栈?

1 个答案:

答案 0 :(得分:3)

Error in nls(meandec ~ SSasymp(Time.Since.Burn, Asym, R0, lrc), data = averaged_perherb,: parameters without starting value in 'data': Asym, R0, lrc 套接字类型可以看到,

IPv6套接字还可以侦听传入的IPv4连接。没有什么不妥。 IPv6的增长速度非常快,确保您的软件可以同时与IPv4和IPv6兼容是一种很好的做法,它将防止将来(和今天)发生许多问题。

强烈建议不要强制套接字仅侦听IPv4。