2016-04-14 29 views
0

我正在編寫一個需要多人遊戲的交易遊戲。我意識到,我的客戶端只能通過運行服務器的PC上的「本地主機」訪問。我怎麼知道服務器是否在線,所以我知道防火牆還是其他的東西?如果有人已經知道解決方案,我會更快樂。只能通過「localhost」訪問我的服務器

謝謝!

編輯:我的操作系統是Windows 7

更新: 我設法與兩個地址我通過IPCONFIG發現連接到我的服務器在同一臺計算機上。其中一個是我的根植者向我傾訴的,另一個來自我不知道的。首先,我嘗試了通過在Google上搜索「我的IP是什麼」的方式找到的那個,但沒有成功。我仍然無法通過連接到同一路由器(fritz-box)的其他PC連接到服務器。

Server: 

    ExecutorService executor = Executors.newFixedThreadPool(100);  

    ServerSocket server;   
    try {    
     server = new ServerSocket(5555);  
     System.out.println("Server gestartet"); 

     while(true){ 
      Socket client = server.accept(); 
      executor.execute(new ClientHandler(client));     
     }   

    }catch (Exception e) { 
     e.printStackTrace(); 
    }  
} 

    Client: 

    try { 
      InetAddress addr = InetAddress.getByName("MY IP");         
       //Works 
       client = new Socket("localhost",Port); 
       //Does not work 
       client = new Socket(addr,Port); 
       //Does not work 
       client = new Socket("MY IP",Port); 

       System.out.println("Client gestartet"); 

       //Streams   
       out = client.getOutputStream(); 
       writer = new PrintWriter(out); 

       in = client.getInputStream(); 
       reader = new BufferedReader(new InputStreamReader(in)); 
       // ------------------------------------------------   

       String s = null;      
       while((s=reader.readLine())!=null){ 
        render(s); 
       }    
      } catch (IOException e) 
      { 
      e.printStackTrace(); 
      } 

我離開了ClientHandler,因爲我確信沒有問題。

+0

你在使用什麼操作系統? – medievalgeek

+0

您是否嘗試過按照https://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#ServerSocket(ServerSocket(int port,int backlog,InetAddress bindAddr))的格式INT,%20int,%20java.net.InetAddress)? – Hang

+0

@Hang在你列出的頁面上說,如果沒有指定bindAddr,它將綁定到任何/所有本地地址。 – medievalgeek

回答

0

如果是防火牆問題,您將收到連接超時。如果你得到'拒絕連接',服務器沒有運行。

不是修改您的ServerSocket建設,如其他地方建議。你這樣做的方式是正確的。

+0

根據防火牆是否配置爲放棄或拒絕,答案的第一部分可能是正確的,也可能不正確。 – medievalgeek

相關問題