2010-11-23 37 views
0

我遇到了一個很常見的問題,其中僅用於端口的綁定函數(即通配符綁定)實際上並不監聽Linux網絡別名(單個網卡上的附加地址) 。Java中的通配符綁定不綁定到網絡別名

這意味着向網卡的主IP地址發送請求確實可以正常工作,但是對其他IP的任何請求都會失敗。

有沒有人在過去遇到過這個?

+0

這些'別名'是如何設置的? `ip addr add`,還是別的? – 2010-11-23 16:50:47

+0

他們通過ifcfg-eth0:0等添加。 – SyBer 2010-11-25 20:02:13

回答

2

如果我這樣做:

sudo ip addr add 192.168.1.186/24 dev eth0 

然後運行這個命令:

import java.net.*; 

public class Bind { 
    public static void main(String... args) throws Exception { 
     ServerSocket ss = new ServerSocket(8888, 50, InetAddress.getByName("0.0.0.0")); 
     Socket s = ss.accept(); 
     System.out.println("accepted socket " + s); 
    } 
} 

然後在另一個shell,這樣的:

telnet 192.168.1.186 8888 

在第一殼體打印程序:

accepted socket Socket[addr=/192.168.1.186,port=33867,localport=8888] 

如果我再說一遍,但使用我的'真實'地址,那也可以。

因此,它看起來像綁定到0.0.0.0綁定到所有地址,包括額外的添加到設備。

如果我更改ServerSocket構造函數調用以使用單參數形式,所有東西仍然如上所述,所以它看起來像是綁定到0.0.0.0。