2010-07-30 4 views
10

Ich habe eine einfache Java-Anwendung geschrieben, die mit mehreren Instanzen von sich selbst mit Sockets interagiert. Die erste Instanz übernimmt automatisch die Rolle des Servers, der auf einem bestimmten Port wartet, und alle nachfolgenden Instanzen stellen eine Verbindung her.Vermeiden Sie Windows-Firewall-Popup mit Sockets auf localhost

Das Problem, mit dem ich konfrontiert bin, ist, dass die Windows-Firewall auftaucht und fragt, ob ich das Programm von "Annahme eingehender Netzwerkverbindungen" entblockieren möchte. Die Sache ist: ist es egal, wenn Sie die Anwendung blockiert, weil die Instanzen der Anwendung immer auf der gleichen Maschine sind, so wird es immer funktionieren.

Meine Frage ist: Kann ich Windows irgendwie darüber informieren, dass eingehende Netzwerkverbindungen nicht akzeptiert werden sollen?

+0

Klären. Sie möchten, dass die Windows Firewall alle eingehenden Netzwerkanforderungen automatisch blockiert? – Caladain

+1

Ich möchte den Socket nur auf dem lokalen Host, * nicht * auf eingehenden Netzwerkverkehr hören. Mit anderen Worten, ich möchte nicht, dass die Windows-Firewall überhaupt Pop-ups anzeigt. –

Antwort

12

Verwenden Sie die three parameter constructor der ServerSocket-Klasse, um auch die IP-Adresse anzugeben, die der Server überwachen soll. Auf diese Weise können Sie den Server darauf beschränken, nur auf 127.0.0.1 zu hören, im Gegensatz zum Standardwert 0.0.0.0. Weitere Informationen finden Sie unter this related SO question.

BEARBEITEN: Es wird empfohlen, InetAddress.getByName (null) zu verwenden, um die lokale Adresse zu erhalten.

+2

Großartig, das funktioniert! Ich hatte diesen Konstruktor mit dem letzten Parameter versucht, der 'InetAddress.getLocalHost()' ist, aber das ist offenbar die Netzwerkadresse des localhost. Ersetzen Sie es mit 'InetAddress.getByName (null)' vermeidet das Firewall-Popup. –