从M-SEARCH响应中获取位置标题

时间:2015-02-23 15:49:03

标签: java android

我正在尝试使用java实现Android中的DIAL protocol

遵循协议,我必须做一个M-SEARCH请求。为此,我使用以下代码:

private final static String DISCOVER_MESSAGE = "M-SEARCH * HTTP/1.1\r\n"
        + "HOST: 239.255.255.250:1900\r\n" + "MAN: \"ssdp:discover\"\r\n"
        + "MX: 120\r\n" + "ST: urn:dial­multiscreen­org:service:dial:1\r\n";

实际方法:

// Set the MulticastSocket to DIAL implementation.
// See the Discover Message for its full implementation.
final int port = 1900;
InetAddress multicastAddress = InetAddress.getByName("239.255.255.250");
MulticastSocket usedSocket = new MulticastSocket(port);
usedSocket.setReuseAddress(true);
usedSocket.setSoTimeout(130000);
usedSocket.joinGroup(multicastAddress);

byte[] requestMessage = DISCOVER_MESSAGE.getBytes("UTF-8");
DatagramPacket datagramPacket = new DatagramPacket(requestMessage,
           requestMessage.length, multicastAddress, port);

// Send the package.
usedSocket.send(datagramPacket);

// Listen for the response.
byte[] buf = new byte[9000];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
usedSocket.receive(packet);

response = new String(packet.getData());

我现在遇到的问题是,根据规范:

  

接收具有上述定义的搜索目标的M-SEARCH请求的SSDP / UPnP服务器应按照1的1.3.3节中的定义进行响应,包括LOCATIONheader,其中包含用于UPnP描述的绝对HTTP URL。根设备。 URL的主机部分应解析为IPv4地址或IPv4地址。

但是我在回复的包中得到的所有内容似乎与我发送的数据相同。

这可能是由于我对回复的错误阅读,我不确定。如何从此M-SEARCH响应中获取位置标题?

这可能是由错误的M-SEARCH请求引起的吗?

1 个答案:

答案 0 :(得分:0)

我自己在Android应用中这样做了 我看到的主要区别(有效,并且基于我在网上找到的M-SEARCH示例)

   StringBuffer mSearchMessage = new StringBuffer();
    mSearchMessage.append("M-SEARCH * HTTP/1.1\r\n");
    mSearchMessage.append("HOST: " + SSDP_IP + ":" + SSDP_PORT + "\r\n");
    mSearchMessage.append("ST:urn:dial-multiscreen-org:service:dial:1\r\n");
    mSearchMessage.append("MAN: \"ssdp:discover\"\r\n");
    mSearchMessage.append("MX: 2\r\n");
    mSearchMessage.append("\r\n");

虽然你的,特别是ST线     “MX:120 \ r \ n”+“ST:urn:dialmultiscreenorg:service:dial:1 \ r \ n”;

所以似乎有一些连字符丢失了......我怀疑你现在可能已经解决了这个问题,但这至少有一部分可能导致问题,因为我认为ST意味着它会自己查找该字符串设备