2016-04-14 5 views
0

Я программирую торговую игру, для которой требуется многопользовательская игра. Я понял, что мой клиент может получить доступ только через «localhost» на ПК, на котором работает сервер. Как я могу выяснить, находится ли сервер в сети, поэтому я знаю, является ли брандмауэр или что-то еще? Если кто-то уже знает решение, я был бы еще счастливее.Доступ только к моему серверу через «localhost»

Спасибо!

редактировать: Моя операционная система Windows 7

Update: мне удалось подключиться к серверу на том же компьютере с двумя адресами я нашел через Ipconfig. Тот, который мой корневик осмыслил меня, и я не знаю, был другой. Сначала я попробовал тот, который нашел через поиск «что такое мой IP» в Google, который не работал. Я до сих пор не могу подключиться к серверу через другие компьютеры, подключенные к одному маршрутизатору (fritz-box).

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

Вы пробовали формат 'ServerSocket (int port, int backlog, InetAddress bindAddr)' в соответствии с https://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#ServerSocket (ИНТ,% 20int,% 20java.net.InetAddress)? – Hang

+0

@Hang На этой странице вы указали, что она связывается с любыми/всеми локальными адресами, если bindAddr не указан. – medievalgeek

ответ

0

Если это проблема брандмауэра, вы получите таймаут соединения. Если вы получили «отказ в соединении», сервер не работает.

Do не изменить ваш ServerSocket строительство, как предлагается в другом месте здесь. То, как вы это делаете, правильно.

+0

В зависимости от того, настроен ли брандмауэр для сброса или отклонения, первая часть вашего ответа может быть или не быть правильной. – medievalgeek

Смежные вопросы