什麼會導致這種情況發生?服務器沒有從客戶端收到正確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.7文檔。 ['ServerSocket.accept()'](http://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#accept%28%29)*「監聽連接這個方法**阻塞**,直到建立連接。「*建議'不建立連接'。 –
好吧,它可能沒有獲得連接。但客戶端擁有正確的IP和端口,因此可能會阻止這種情況? –
請注意,該文檔中的「阻塞直到」實際上意味着「等待」而不是「拒絕或阻止」。它有點不清楚(用模糊的語言寫成,每個詞至少意味着兩件事)。看起來代碼正在等待從未到達的傳入連接(無論出於何種原因)。 –