我正在编写以下用于在Windows中打开端口的java程序。据我所知,每当我们打开一个端口时,防火墙都应该要求允许访问权限。但这里没有暗示它正在开放。它背后的原因是什么。
mycode的
import java.net.*;
import java.io.*;
class Server
{
public static void main(String[] args) throws Exception
{
if(args.length!=1)
{
System.out.println("Enter the Port Number");
return;
}
int portNumber = Integer.parseInt(args[0]);
ServerSocket ss = new ServerSocket(portNumber);
while(true)
{
Socket socket = ss.accept();
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
String message = (String)ois.readObject();
System.out.println("Client: "+message);
if(message.equals("exit")) break;
ois.close();
}
ss.close();
}
}
答案 0 :(得分:1)
只要程序打开一个没有与之关联的规则的侦听套接字端口,Windows防火墙就会提示用户“允许应用程序”。 (即新节目)。但是当用户在确认对话框中单击“允许”时,它将用于整个程序,而不仅仅是一个端口。一旦确认,它通常不会再次提示用户。
对于Java,正在运行的程序是Java.exe。因此,一旦用户单击“允许”运行Java的第一个程序,所有后续Java程序都会在没有提示的情况下启用。我还怀疑Java安装程序也为自己设置了防火墙规则。我好像有几个:
换句话说,您已经注册了Java,因此不会再次收到提示。