如何用Java发送M-SEARCH查询



我的网络上有一个Roku设备,我希望能够用程序发现它。Roku的官方文件显示:

有一个标准的SSDP多播地址和端口(239.255.255.250:1900),用于本地网络通信。Roku对此ip地址和端口的M-SEARCH查询作出响应。

为了查询roku ip地址,您的程序可以发送使用http协议将以下请求发送到239.255.255.250端口1900年:

他们提供了一个使用netcat的例子,他们说wireshark可以用来找到结果。他们还说:

外部控制协议使Roku能够通过网络。可通过SSDP发现外部控制服务(简单服务发现协议)。该服务是一个简单的RESTfulAPI几乎可以由任何编程中的程序访问环境

我有一个java程序,根据Roku的IP地址控制它,我想实现一个功能,使用这个SSDP在网络上发现它。

如何使用java发送M-SEARCH查询?我完全不知道该怎么做。这像是一个获取/发布请求吗?如果有人能为我指明正确的方向,我将不胜感激!

我找到了一个java解决方案:

/* multicast SSDP M-SEARCH example for 
 * finding the IP Address of a Roku
 * device. For more info go to: 
 * http://sdkdocs.roku.com/display/sdkdoc/External+Control+Guide 
 */
import java.io.*;
import java.net.*;
class msearchSSDPRequest {
    public static void main(String args[]) throws Exception {
        /* create byte arrays to hold our send and response data */
        byte[] sendData = new byte[1024];
        byte[] receiveData = new byte[1024];
        /* our M-SEARCH data as a byte array */
        String MSEARCH = "M-SEARCH * HTTP/1.1nHost: 239.255.255.250:1900nMan: "ssdp:discover"nST: roku:ecpn"; 
        sendData = MSEARCH.getBytes();
        /* create a packet from our data destined for 239.255.255.250:1900 */
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getByName("239.255.255.250"), 1900);
        /* send packet to the socket we're creating */
        DatagramSocket clientSocket = new DatagramSocket();
        clientSocket.send(sendPacket);
        /* recieve response and store in our receivePacket */
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        clientSocket.receive(receivePacket);
        /* get the response as a string */
        String response = new String(receivePacket.getData());
        /* print the response */
        System.out.println(response);
        /* close the socket */
        clientSocket.close();
    }
}

相关内容

  • 没有找到相关文章