我正在尝试使用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:dialmultiscreenorg: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请求引起的吗?
答案 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意味着它会自己查找该字符串设备