2

M-SEARCH コマンドが発行されると、サービスを提供するすべてのデバイスは、提供するサービスの IP アドレスで応答する必要があります。

私の携帯電話には (特に) 2 つのインターフェイスがあります。

  • 192.168.1.5: wifi のインターフェース
  • 25.156.35.4: モバイル ネットワーク インターフェイス

M-SEARCH を受信するインターフェイスに応じて、wifi の IP またはモバイル IP を使用して返信する必要があります。

リクエストを受信したインターフェイスを特定するにはどうすればよいですか? これを行うための堅牢な方法を探しています。192.168 を探しています... 良い解決策とは思えません。

私はこの方法で M_SEARCH を聞きます:

MulticastSocket clientSocket;                   
clientSocket = new MulticastSocket(1900);
clientSocket.joinGroup(InetAddress.getByName("239.255.255.250") );
while(true) 
{

    byte[] buf = new byte[1024];
    DatagramPacket dp = new DatagramPacket(buf, buf.length);

    clientSocket.receive(dp);
    final String msg = new String(dp.getData(), 0, dp.getLength());

    if (msg.contains("M-SEARCH")) 
    {
        DatagramSocket resSocket = new DatagramSocket(null);

        String req = "HTTP/1.1 200 OK\r\n";
        req += "LOCATION: http://" + IP_TO_SPECIFY + "/index.html  \r\n";
        req += "HOST: "+android.os.Build.MODEL+"\r\n";
        req += "EXT: \r\n";
        req += "ST: upnp:rootdevice\r\n";
        byte [] sendData = req.getBytes();

        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, dp.getAddress(), dp.getPort());
        resSocket.send(sendPacket);
        resSocket.close();
    }                       
}
4

1 に答える 1