2017-02-06 5 views
0

Гиды, мой код здесь для создания простого сервера отлично работает с локальным адресом хоста (127.0.0.1). Вот мой код.Как создать объект ServerSocket без адреса localhost

import java.io.*; 
import java.net.*; 
public class Main { 

    public static void main(String[] args) 
    { 
     Zig z = new Zig(); 
     z.start(); 
    } 
} 
class Zig 
{ 
    ServerSocket ss = null; 
    InetAddress ia = null; 
    Socket s = null; 
    private static final int prt = 56540; 
    Zig() 
    { 
     try 
     { 
      byte[] addr = {127,0,0,1}; 
      ia = InetAddress.getByAddress(addr); 
      SocketAddress sa = new InetSocketAddress(ia,prt); 
      ss = new ServerSocket(); 
      ss.bind(sa); 
      s = ss.accept(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
    Zig start() 
    { 
     try 
     { 
      InputStream i = s.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(i); 
      BufferedReader br = new BufferedReader(isr); 
      String str = null; 
      while (str != "stp") 
      { 
       str = br.readLine(); 
       System.out.println(str); 

      } 
      br.close(); 
      isr.close(); 
      i.close(); 
      s.close(); 
      ss.close(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     return this; 
    } 
} 

Мой вопрос, как я могу использовать IP-маршрутизатора - 192.168.8.1 вместо 127.0.0.1? Я также попытался IP-адрес от http://whatsmyip.org, но все-таки получил это исключение:

java.net.BindException: Cannot assign requested address: JVM_Bind 
    at java.net.DualStackPlainSocketImpl.bind0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106) 
    at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387) 
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190) 
    at java.net.ServerSocket.bind(ServerSocket.java:375) 
    at java.net.ServerSocket.bind(ServerSocket.java:329) 
    at Zig.<init>(Main.java:26) 
    at Main.main(Main.java:8) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 
Exception in thread "main" java.lang.NullPointerException 
    at Zig.start(Main.java:38) 
    at Main.main(Main.java:9) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

Я хотел создать простой сервер с этим я могу получить удаленный доступ с другим компьютером и имеющие подключения к Интернету. Или есть способ, которым я могу общаться между двумя компьютерами через Интернет?

С уважением.

ответ

0

как я могу использовать IP маршрутизатора - 192.168.8.1

Вы не можете использовать IP маршрутизатора. Вы должны использовать IP-адреса, доступные в системе.

Примечание эта ошибка:

> java.net.BindException: Cannot assign requested address: JVM_Bind 

bind терпит неудачу, потому что адрес не то, что системы.

0

Если вы хотите, чтобы ваши 2 устройства связывались через локальную сеть (локальная сеть), вы можете использовать адреса, назначенные вашему маршрутизатору этим устройствам (это адрес 192.168.8.X, который вы упомянули). EDIT: Как упоминал Прабху, используйте устройства IP-адрес, а не IP-адрес маршрутизаторов! Обычно вы можете найти IP-адреса вашего маршрутизатора, назначенные подключенным устройствам в вашем маршрутизаторе-админ-интерфейсе). Помните, что в будущем ваш маршрутизатор может назначить другой адрес на одни и те же устройства. Большинство маршрутизаторов имеют функцию, которая всегда назначает один и тот же IP-адрес определенному устройству. Кроме того, некоторые маршрутизаторы блокируют связь между локальными устройствами (т. Е. Между проводными и WiFi-отклонениями) по соображениям безопасности. Проверьте конфигурацию вашего маршрутизатора для получения дополнительной информации и параметров конфигурации!

Если вы хотите, чтобы ваши устройства подключались через Интернет, вы должны использовать глобальный IP-адрес маршрутизаторов (возможно, тот, который вы узнали, используя whatsmyip).

Кроме того, ваш маршрутизатор обычно просто блокирует входящие запросы из Интернета по соображениям безопасности. Опять же, ваш маршрутизатор, вероятно, имеет функцию Переадресация портов, что позволяет перенаправлять запросы на определенное устройство (и определенный порт на этом устройстве) в вашей локальной сети. Используйте это с осторожностью, так как это открывает (часть) ваших встроенных механизмов безопасности маршрутизаторов.

И, наконец, в зависимости от вашего провайдера у вас может быть IPv4-адрес (см. Wikipedia), который вы используете совместно с другими клиентами (так называемый DS-Lite (Wiki). В этом случае вы недоступны для сети IPv4-internet вообще, и ваш единственный шанс - использовать протокол IPv6 (если он доступен).

Надеюсь, что это поможет.

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