2010-11-23 7 views
0

J'ai rencontré un problème assez inhabituel, où la fonction de liaison au port uniquement (c'est-à-dire la liaison générique) n'écoute pas réellement les alias réseau Linux (les adresses supplémentaires sur la carte réseau unique) . Cela signifie que l'envoi de requêtes à l'adresse IP principale de la carte réseau fonctionne normalement, mais que les demandes d'adresses IP supplémentaires échouent.La liaison générique dans Java ne se lie pas aux alias réseau

Est-ce que quelqu'un a déjà rencontré ça?

+0

Comment ces 'alias' sont-ils configurés? 'ip addr add', ou autre chose? –

+0

Ils ont ajouté via ifcfg-eth0: 0 et ainsi de suite. – SyBer

Répondre

2

Si je fais ceci:

sudo ip addr add 192.168.1.186/24 dev eth0 

Puis, utilisez ceci:

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); 
    } 
} 

Puis, dans un autre shell, ceci:

telnet 192.168.1.186 8888 

Le programme dans les premières impressions shell:

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

Si je répète cela mais que j'utilise ma "vraie" adresse, cela fonctionne aussi. Donc, il me semble que la liaison à 0.0.0.0 se lie à toutes les adresses, y compris celles ajoutées à un périphérique.

Si je change l'appel du constructeur ServerSocket pour utiliser le formulaire à un seul argument, tout fonctionne toujours comme décrit, donc il semble que ce soit lié à 0.0.0.0.

+0

Eh bien, cela pourrait être un problème avec Mina 1.1.x lib que j'ai utilisé, parce que dans mon cas, le port UDP ne fonctionne que sur la première adresse IP. Seulement après avoir spécifiquement lié à chaque adresse IP requise, il a commencé à fonctionner normalement. – SyBer