2013-10-15 71 views
0
import java.io.DataInputStream; 
import java.io.DataOutput; 
import java.io.DataOutputStream; 
import java.net.*; 
import java.util.concurrent.*; 

public class Server { 

    public static void main(String[] args) { 
     try { 
      ServerSocket serverSocket = new ServerSocket(80); 
      while (true) { 
       Socket socket = serverSocket.accept(); 
       System.out.println("Test"); 
       socket.close(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

當我使用chrome訪問localhost:80時,爲什麼服務器打印字符串「Test」3次?當我使用IE10訪問它時,它會打印兩次。Java套接字編程,爲什麼瀏覽器建立連接不止一次?

+0

正如這個問題的答案所暗示的,當客戶端正在談論像HTTP這樣的更高級協議時,談論原始套接字可能是一個糟糕的主意:結果可能不會成爲您期望的結果。你想在這裏完成什麼?爲什麼不使用HTTP服務器的實現,即使在'sun'包中,甚至包含Java? – 2013-10-16 00:24:39

回答

3

如果你打印出它正在製作的HTTP請求,你可能會明白爲什麼。最有可能的是,瀏覽器要麼嘗試爲您的「網站」(localhost)加載favicon.ico,要麼嘗試重新連接到不會說出正確HTTP的服務器。

+0

喜歡這個答案。 +1 – Sage

3

當它連接到Web服務器時,它會請求像favicon這樣的數字資源。我建議你打印它所要求的內容,以便你不必猜測爲什麼它被訪問多次。

+0

非常感謝,我會嘗試。 – user2884473