2015-02-23 25 views
0

我试图在Android中使用java实现DIAL protocol从M-SEARCH Response获取位置标题

遵循协议实现,我必须做一个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()); 

我现在遇到的问题是,根据本说明书中:

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

但所有我在回应包获得,似乎是我送了相同的数据。

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

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

回答

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意味着它寻找该字符串它自己装置。