2016-11-21 109 views
-1

我正在寫下面的Java程序用於在Windows中打開端口。據我所知,無論何時打開一個端口,防火牆都應該要求允許訪問權限。但是這裏沒有暗示它是開放的。背後的原因是什麼?防火牆不要求允許打開端口

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

您確定防火牆是否在意您是否打開該端口?它不應該將所有的連接請求轉發到端口嗎? –

+0

你的代碼是否拋出異常?如果沒有,你可以與另一端進行溝通,那麼沒有問題。 –

+0

@ThomasStets當我們安裝像ApacheTomcat這樣的服務器時,防火牆將彈出並詢問允許訪問的權限。這就是當我們編寫一個程序來打開/創建應該彈出的端口時我想到的原因。 – KC7

回答

1

Windows防火牆會提示用戶「允許的應用程序」,只要自己認爲程序打開沒有與之相關聯的規則監聽套接字端口。 (即新程序)。但是當用戶在確認對話框上點擊「允許」時,它就是整個程序,而不僅僅是一個端口。一旦給出確認,它通常不會再次提示用戶。

在Java的情況下,正在運行的程序是Java.exe。因此,一旦用戶點擊「允許」到運行Java的第一個程序,所有後續的Java程序都會在不提示的情況下啓用。我也懷疑Java安裝程序只是爲它自己設置了防火牆規則。我似乎有幾個:

換句話說,你已經得到了Java的註冊,這樣你就不會再被提示。

相關問題