2015-08-19 2 views
0

Я хочу сделать tcp/ip соединение между моим маршрутизатором и устройством Android. Я уже подключаюсь к определенной сети Wi-Fi. Но мне также нужно получить IPv4-адрес с моего маршрутизатора, чтобы установить соединение tcp/ip. Возможно ли получить IPv4-адрес, если я уже подключен. Вот мой код, как я тоже подключаю свой маршрутизатор.Как получить адрес IPv4 от уже подключенного маршрутизатора через wifi

@Override 
    public void onReceive(Context context, Intent intent) { 
     List<ScanResult> list = scanner.getScanResults(); 

     for(ScanResult result : list){ 
      if(result.SSID.equals("Micro")){ 
       //Connect to THIS network 
       connect(result.SSID); 
       break; 
      } 
     } 
    } 

    public void connect(String name){ 
     String password = "myPassword"; 
     WifiConfiguration conf = new WifiConfiguration(); 
     conf.SSID = "\"" + name + "\""; 
     conf.preSharedKey = "\""+ password +"\""; 

     scanner.addNetwork(conf); 

     List<WifiConfiguration> list = scanner.getConfiguredNetworks(); 
     for(WifiConfiguration i : list) { 
      if(i.SSID != null && i.SSID.equals("\"" + name + "\"")) { 
       scanner.disconnect(); 
       scanner.enableNetwork(i.networkId, true); 
       scanner.reconnect(); 
       break; 
      } 
     } 
    } 

Вот мой Clien класса общественного класс TCPClient {

private String serverMessage; 
public static final String SERVER_IP = "xxx.xxx.x.xx"; // computer IP address 
public static final int SERVER_PORT = 4444; 
private OnMessageReceived mMessageListener = null; 
private boolean run = false; 
private PrintWriter out; 
private BufferedReader in; 

/** 
* Constructor of the class. OnMessagedReceived listens for the messages received from server 
*/ 
public TCPClient(OnMessageReceived listener) { 
    mMessageListener = listener; 
} 

/** 
* Sends the message entered by client to the server 
* @param message text entered by client 
*/ 
public void sendMessage(String message){ 
    if (out != null && !out.checkError()) { 
     out.println(message); 
     out.flush(); 
    } 
} 

public void stopClient(){ 
    run = false; 
} 

public void run() { 

    run = true; 

    try { 
     // computer's IP address. 
     InetAddress serverAddr = InetAddress.getByName(SERVER_IP); 

     //create a socket to make the connection with the server 
     Socket socket = new Socket(serverAddr, SERVER_PORT); 

     try { 

      //send the message to the server 
      out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true); 

      //receive the message which the server sends back 
      in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

      //in this while the client listens for the messages sent by the server 
      while (run) { 
       serverMessage = in.readLine(); 
       if (serverMessage != null && mMessageListener != null) { 
        //call the method messageReceived from MyActivity class 
        mMessageListener.messageReceived(serverMessage); 
       } 
       serverMessage = null; 
      } 

      Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'"); 

     } catch (Exception e) { 

      Log.e("TCP", "S: Error", e); 

     } finally { 
      //the socket must be closed. It is not possible to reconnect to this socket 
      // after it is closed, which means a new socket instance has to be created. 
      socket.close(); 
     } 

    } catch (Exception e) { 

     Log.e("TCP", "C: Error", e); 

    } 

} 

//Declare the interface. The method messageReceived(String message) will must be implemented in the MyActivity 
//class at on asynckTask doInBackground 
public interface OnMessageReceived { 
    void messageReceived(String message); 
} 

} Так теперь я жестко закодированный мой IP-адрес, но как я могу получить от подключенного устройства?

ответ

0

Следующим шагом является запуск клиента dhcp или отправка сообщения DHCP из приложения. Легкой альтернативой, чтобы заставить ее работать быстро, является назначение статического IP-адреса, но это не рекомендуется, так как может быть IP-столкновение.

+0

Хорошо, но как я могу отправлять сообщения DHCP? – David

+0

@ Давид. Кажется, для этого нет API. Вы можете реализовать собственный DHCP-клиент, а затем настроить сетевой интерфейс – rodolk

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