2012-12-22 55 views
0

什麼會導致這種情況發生?服務器沒有從客戶端收到正確IP和端口打開的消息

我將我的筆記本電腦移動到朋友家來處理這個項目。我在他的xfinity路由器上打開了相同的端口,並將我的代碼的所有區域更改爲他的IP。然而,看起來客戶端正在發送消息並且服務器從未越過這部分代碼

System.out.println("running server!"); 
     int nreq = 1; 
     try{ 
      //SET ME PORT 
      ServerSocket sock = new ServerSocket(7332); 
     for(;;){ 
      Socket newsock = sock.accept(); 
      System.out.println("Creating thread..."); 
      //Broken Old Login crap, needs reworked for map n stuff anyhow now 
     // Thread t = new ThreadHandler(newsock, nreq); 
      Thread t = new RequestInterpreter(newsock, nreq); 
      //t.run(); 
      t.start(); 
      nreq++; 
     } 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     }  

它永遠不會打印「創建線程」。我不確定從哪裏開始可能會出現問題?

唯一改變的是房屋,IP,路由器和互聯網。在其他地方工作。那些改變可能會阻止客戶端發送一個

這是我寫的一個測試客戶端。

import java.io.DataInputStream; 
import java.io.PrintWriter; 
import java.net.Socket; 




public class testClientConnection { 

    public static void main(String[] args) { 

     System.out.println("Starting testConnection"); 
     try{    

     Socket s = new Socket("xx.xx.xx.xxx", 7332);   

     DataInputStream fromServer = new DataInputStream(s.getInputStream()); 
     PrintWriter toServer = new PrintWriter(s.getOutputStream(), true);  
     toServer.println("account name"); 
     toServer.println("password"); 
     toServer.println("Login"); 

     System.out.println("Sent message..."); 

     String response = fromServer.readLine().toString(); 
     //Toast the result here? //testing 

     System.out.println("response: " + response); 
     if (response.equals("Login Success")) { 

System.out.println("Login Success!!!"); 
     } 
     } 
     catch(Exception e){ /  
     }  
    } 
} 

巨大的更新!

好的,所以我的客戶端是一部android手機,我把無線網關掉了,所以它掉到了4g-LTE上。然後它工作。所以...有些東西阻止了客戶端代碼。那可能是什麼?

+1

從1.7文檔。 ['ServerSocket.accept()'](http://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#accept%28%29)*「監聽連接這個方法**阻塞**,直到建立連接。「*建議'不建立連接'。 –

+0

好吧,它可能沒有獲得連接。但客戶端擁有正確的IP和端口,因此可能會阻止這種情況? –

+0

請注意,該文檔中的「阻塞直到」實際上意味着「等待」而不是「拒絕或阻止」。它有點不清楚(用模糊的語言寫成,每個詞至少意味着兩件事)。看起來代碼正在等待從未到達的傳入連接(無論出於何種原因)。 –

回答

0

朋友的路由器上的防火牆是通常的嫌疑犯。 第二個嫌疑犯是目標機器上的防火牆。

嘗試禁用這些。

+0

那麼如果我的筆記本電腦上的防火牆不需要在其他位置配置我應該認爲它不需要任何更改?與其他人一樣,這被設置爲「家庭網絡」。 –

+0

不是你的防火牆。路由器的一個。或者是目標機器的。並且不是所有路由器配置方式都不相同。 – sqreept

+0

我完全禁用路由器上的防火牆,它仍然無法工作。 –

0

問題將在路由器上的NAT。

除非您設置端口轉發,以便路由器知道從外部發送傳入請求的位置,否則服務器不會在NAT設備後面工作。

相關問題