现在有一台服务器是双网卡。与第三方服务器建立连接的时候需要指定一下本地的IP。Socket(String host, int port, InetAddress localAddr, int localPort) 
       //   Creates a socket and connects it to the specified remote host on the specified remote port.本来应该是使用上面这个构造函数来创建一个Socket对象的。
但是由于是使用的第三方库(Smack),创建Socket的时候是自动选择的本机IP,所以这里不符合我的要求,我根据文档、源码、配置都没有查找到可以快速修改的方法(只有修改源码)。想请高手指导一下:我希望尽量在其它方面扩展一下来完成这个功能。
我现在有一个方案是:实现SocketImplFactory,里面自己创建一个SocketImpl然后完成绑定。当我正要做的时候去查看相关实现的源码,居然访问权限全是default,我悲剧啊。我这里有一个类库:jsocks,没有用过不知道有什么用处。求高手。http://topic.csdn.net/u/20110924/12/e900b291-8431-4166-85e5-5f2409d46ea2.html

解决方案 »

  1.   


    我很不解。Socket socket = new Socket()每次像上面创建对象的时候,默认的IP都是一样的,不会改变。PS:服务器上面不止有两块网卡。下面的网卡信息。<!--
    connectora:/home/connector/server/test # ifconfig
    bond0     Link encap:Ethernet  HWaddr 78:1D:BA:56:98:66
              inet addr:192.168.1.169  Bcast:192.168.1.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
              RX packets:36674976 errors:0 dropped:11471188 overruns:0 frame:173096
              TX packets:1396995 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:3403987191 (3246.2 Mb)  TX bytes:457241559 (436.0 Mb)bond1     Link encap:Ethernet  HWaddr 78:1D:BA:56:98:68
              inet addr:10.237.104.214  Bcast:10.237.104.255  Mask:255.255.255.192
              UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
              RX packets:1775695 errors:0 dropped:0 overruns:0 frame:0
              TX packets:209903 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:194990208 (185.9 Mb)  TX bytes:25850386 (24.6 Mb)bond1:0   Link encap:Ethernet  HWaddr 78:1D:BA:56:98:68
              inet addr:10.237.104.197  Bcast:10.237.104.255  Mask:255.255.255.192
              UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1bond1:1   Link encap:Ethernet  HWaddr 78:1D:BA:56:98:68
              inet addr:10.237.104.196  Bcast:10.237.104.255  Mask:255.255.255.192
              UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1eth0      Link encap:Ethernet  HWaddr 28:6E:D4:F8:20:88
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
              Interrupt:169eth1      Link encap:Ethernet  HWaddr 28:6E:D4:F8:20:89
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
              Interrupt:58eth2      Link encap:Ethernet  HWaddr 28:6E:D4:F8:20:54
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
              Interrupt:58eth3      Link encap:Ethernet  HWaddr 28:6E:D4:F8:20:55
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
              Interrupt:66eth4      Link encap:Ethernet  HWaddr 28:6E:D4:F8:1F:D6
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
              Interrupt:74eth5      Link encap:Ethernet  HWaddr 28:6E:D4:F8:1F:D7
              UP BROADCAST MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
              Interrupt:169eth6      Link encap:Ethernet  HWaddr 78:1D:BA:56:98:68
              UP BROADCAST RUNNING ALLMULTI SLAVE MULTICAST  MTU:1500  Metric:1
              RX packets:1753519 errors:0 dropped:0 overruns:0 frame:0
              TX packets:209900 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:193570944 (184.6 Mb)  TX bytes:25850192 (24.6 Mb)
              Interrupt:66eth7      Link encap:Ethernet  HWaddr 78:1D:BA:56:98:68
              UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
              RX packets:22176 errors:0 dropped:0 overruns:0 frame:0
              TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:1419264 (1.3 Mb)  TX bytes:194 (194.0 b)
              Interrupt:74eth8      Link encap:Ethernet  HWaddr 78:1D:BA:56:98:66
              UP BROADCAST RUNNING ALLMULTI SLAVE MULTICAST  MTU:1500  Metric:1
              RX packets:24850346 errors:0 dropped:7357107 overruns:0 frame:124139
              TX packets:1396992 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:2383053419 (2272.6 Mb)  TX bytes:457241365 (436.0 Mb)
              Interrupt:169eth9      Link encap:Ethernet  HWaddr 78:1D:BA:56:98:66
              UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
              RX packets:11824630 errors:0 dropped:4114081 overruns:0 frame:48957
              TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:1020933772 (973.6 Mb)  TX bytes:194 (194.0 b)
              Interrupt:58eth10     Link encap:Ethernet  HWaddr 78:1D:BA:56:98:65
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:768981 errors:0 dropped:0 overruns:0 frame:0
              TX packets:801085 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:62690006 (59.7 Mb)  TX bytes:75686408 (72.1 Mb)
              Interrupt:169lo        Link encap:Local Loopback
              inet addr:127.0.0.1  Mask:255.0.0.0
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:589753 errors:0 dropped:0 overruns:0 frame:0
              TX packets:589753 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:46302115 (44.1 Mb)  TX bytes:46302115 (44.1 Mb)
    -->
      

  2.   

    bond0     Link encap:Ethernet  HWaddr 78:1D:BA:56:98:66
              inet addr:192.168.1.169  Bcast:192.168.1.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
              RX packets:36674976 errors:0 dropped:11471188 overruns:0 frame:173096
              TX packets:1396995 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:3403987191 (3246.2 Mb)  TX bytes:457241559 (436.0 Mb)bond1     Link encap:Ethernet  HWaddr 78:1D:BA:56:98:68
              inet addr:10.237.104.214  Bcast:10.237.104.255  Mask:255.255.255.192
              UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
              RX packets:1775695 errors:0 dropped:0 overruns:0 frame:0
              TX packets:209903 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:194990208 (185.9 Mb)  TX bytes:25850386 (24.6 Mb)bond1:0   Link encap:Ethernet  HWaddr 78:1D:BA:56:98:68
              inet addr:10.237.104.197  Bcast:10.237.104.255  Mask:255.255.255.192
              UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
    我现在想要创建Socket的时候默认选择绑定[10.237.104.197]这个虚拟IP。目前默认的选择是[10.237.104.214]这个IP,如果我不修改代码手动添加绑定,有什么办法可以默认修改,让Socket在创建的时候就默认去选择197这个ip。