2017-10-13 17 views
0

私はクライアントサーバーアーキテクチャで作業しています。ローカルIPアドレスをサーバーに送信する必要があります。ソケットプログラミングandroid

Socket soc = new Socket(ipaddress,port) 

しかし、問題は、私のローカルIPアドレスと上記のコードで取得したアドレスが異なっている、次のとおりです。

は、私は以下のコードを使用して、それを達成します。

どのようにこの難しさを解決するか??? 助けてください。事前に おかげ

+0

あなたの質問は意味がありません。 'new Socket(...)'はIPアドレスを取得せず、アウトバウンド接続を作成します。いずれにしても、なぜそれを送る必要がありますか?サーバーは、クライアントが接続するとすぐに、受け入れられたソケットから取得できます。 – EJP

答えて

0
Socket mSocket = new Socket(hostAddress, port) 

HOSTADDRESSは、サーバアドレス(リモートホストアドレス)です。 portはIO操作を実行するポート番号です。

サーバーに手動でアドレスを送信することができます: -

try { 
      InetAddress addr = InetAddress.getByName("hostIpAddress"); 
      Socket mSocket = new Socket(addr,8080); 
      DataOutputStream dataOutputStream = new DataOutputStream(
        mSocket.getOutputStream()); 
      DataInputStream dataInputStream = new 
        DataInputStream(mSocket.getInputStream()); 
      dataOutputStream.writeUTF(getIpAddress()); 
      String sereverMesssage = dataInputStream.readUTF(); 
      if(sereverMesssage!=null && sereverMesssage.equals("Success")){ 
       Log.i("Socket","Local Ip Address received by server"); 
      } 

     } catch (UnknownHostException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    private String getIpAddress() { 
     WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE); 
     String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress()); 
     return ip; 
    } 
+0

'serverMessage'はnullにできません。同輩が 'readUTF()'を使用すると仮定します。 – EJP

関連する問題