`

upnp初始化

    博客分类:
  • upnp
 
阅读更多
/*
 * Copyright (C) 2010 Teleal GmbH, Switzerland
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.teleal.cling;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.teleal.cling.controlpoint.ActionCallback;
import org.teleal.cling.model.action.ActionArgumentValue;
import org.teleal.cling.model.action.ActionInvocation;
import org.teleal.cling.model.message.header.STAllHeader;
import org.teleal.cling.model.meta.Action;
import org.teleal.cling.model.meta.LocalDevice;
import org.teleal.cling.model.meta.RemoteDevice;
import org.teleal.cling.model.meta.Service;
import org.teleal.cling.model.types.UDAServiceId;
import org.teleal.cling.registry.Registry;
import org.teleal.cling.registry.RegistryListener;

/**
 * Runs a simple UPnP discovery procedure.
 * <p>
 * Call this class from the command-line to quickly evaluate Cling, it will
 * search for all UPnP devices on your LAN and print out any discovered, added,
 * and removed devices while it is running.
 * </p>
 *
 * @author Christian Bauer
 */
public class MyMain {

    public static void main(String[] args) throws Exception {
        System.out.println("Starting Cling...");
        
        UpnpService upnpService = new UpnpServiceImpl(
                new RegistryListener() {
                    public void remoteDeviceDiscoveryStarted(Registry registry, RemoteDevice device) {
                        System.out.println("Discovery started: " + device.getDisplayString());
                    }
                    public void remoteDeviceDiscoveryFailed(Registry registry, RemoteDevice device, Exception ex) {
                        System.out.println("Discovery failed: " + device.getDisplayString() + " => " + ex);
                    }
                    public void remoteDeviceAdded(Registry registry, RemoteDevice device) {
                        System.out.println("Remote device added: " + device.getDisplayString());
                    }
                    public void remoteDeviceUpdated(Registry registry, RemoteDevice device) {
                        System.out.println("Remote device updated: " + device.getDisplayString());
                    }
                    public void remoteDeviceRemoved(Registry registry, RemoteDevice device) {
                        System.out.println("Remote device removed: " + device.getDisplayString());
                    }
                    public void localDeviceAdded(Registry registry, LocalDevice device) {
                        System.out.println("Local device added: " + device.getDisplayString());
                    }
                    public void localDeviceRemoved(Registry registry, LocalDevice device) {
                        System.out.println("Local device removed: " + device.getDisplayString());
                    }
                    public void beforeShutdown(Registry registry) {
                        System.out.println("Before shutdown, the registry has devices: " + registry.getDevices().size());
                    }
                    public void afterShutdown() {
                        System.out.println("Shutdown of registry complete!");
                    }
                }
        );
        upnpService.getControlPoint().search(new STAllHeader()); // Search for all devices and services
       Thread.sleep(10000); //暂停5秒 查找设备
        
        
        Collection<RemoteDevice> dss = upnpService.getRegistry().getRemoteDevices();
        MyMain mian = new MyMain();
        for(RemoteDevice device:dss){
        	Map<String,Object> inputs = new HashMap<String,Object>();
        	inputs.put("ObjectID","200/516/517");
        	inputs.put("BrowseFlag","BrowseDirectChildren");
        	inputs.put("Filter","*");
            inputs.put("StartingIndex","0");
            inputs.put("RequestedCount","0");
            inputs.put("SortCriteria","");
        	Map outputs = new HashMap();
        	outputs = mian.action(upnpService, device, "ContentDirectory", "Browse", inputs);
        	Set<String> keys = outputs.keySet();
        	for(String key:keys){
        		System.out.println("key:"+key+"  values:"+outputs.get(key));
        	}
        	/*Service service = device.findService(new UDAServiceId("ContentDirectory"));
            Action getStatusAction = service.getAction("Browse");
            ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction);*/
           /* //取第一个目录数据
            getStatusInvocation.setInput("ObjectID", "200/516");
            getStatusInvocation.setInput("BrowseFlag", "BrowseDirectChildren");
            getStatusInvocation.setInput("Filter", "*");
            getStatusInvocation.setInput("StartingIndex", "0");
            getStatusInvocation.setInput("RequestedCount", "0");
            getStatusInvocation.setInput("SortCriteria", "+dc:creator"); //按照 创建时间排序
*/         /* //取根目录数据
            getStatusInvocation.setInput("ObjectID", "0");
            getStatusInvocation.setInput("BrowseFlag", "BrowseDirectChildren");
            getStatusInvocation.setInput("Filter", "*");
            getStatusInvocation.setInput("StartingIndex", "0");
            getStatusInvocation.setInput("RequestedCount", "3");
            getStatusInvocation.setInput("SortCriteria", "");*/
            //根目录元数据
            /*getStatusInvocation.setInput("ObjectID", "0");
            //getStatusInvocation.setInput("BrowseFlag", "BrowseDirectChildren");
            getStatusInvocation.setInput("BrowseFlag", "BrowseMetadata");
            getStatusInvocation.setInput("Filter", "*");
            getStatusInvocation.setInput("StartingIndex", "0");
            getStatusInvocation.setInput("RequestedCount", "0");
            getStatusInvocation.setInput("SortCriteria", "");*/
            
            //同步action 但是也没有发现怎么同步了 ,之前需要sleep
        	/*new ActionCallback.Default(getStatusInvocation, upnpService.getControlPoint()).run();
        	Map map = getStatusInvocation.getOutputMap();
        	ActionArgumentValue ss = getStatusInvocation.getOutput("Result");
        	System.out.println(ss.getValue());*/
        	
        	
        	//异步action
        	/* Service service = device.findService(new UDAServiceId("ContentDirectory"));
             Action getStatusAction = service.getAction("GetSearchCapabilities");
             ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction);
             //getStatusInvocation.setInput("SourceURI", "");
             //getStatusInvocation.setInput("DestinationURI", "");
             ActionCallback getStatusCallback = new ActionCallback(getStatusInvocation) {

                  public void success(ActionInvocation invocation) {
                      ActionArgumentValue status  = invocation.getOutput("SearchCaps");
                     System.out.println(status.getValue());
                      //assertEquals((Boolean) status.getValue(), Boolean.valueOf(false));
                  }
                  @Override
                  public void failure(ActionInvocation invocation, UpnpResponse res) {
                      System.err.println(
                          createDefaultFailureMessage(invocation, res)
                      );
                  }
					@Override
					public void failure(ActionInvocation invocation,
							UpnpResponse operation, String defaultMsg) {
						System.err.println(
                              createDefaultFailureMessage(invocation, operation)
                          );
					}
             };
             upnpService.getControlPoint().execute(getStatusCallback);*/
        }
        System.out.println("Stopping Cling...");
        upnpService.shutdown();
    }
    public Map action(UpnpService upnpService, RemoteDevice device, String serviceId, String actionId, Map inputs){
    	Map retMap = null;
    	Service service = device.findService(new UDAServiceId(serviceId));
        Action getStatusAction = service.getAction(actionId);
        ActionInvocation getStatusInvocation = new ActionInvocation(getStatusAction);
        Set<String> keys = inputs.keySet();
        for(String key:keys){
        	getStatusInvocation.setInput(key, inputs.get(key));
        }
        new ActionCallback.Default(getStatusInvocation, upnpService.getControlPoint()).run();
        retMap = getStatusInvocation.getOutputMap();
        System.out.println(retMap.size());
        return retMap;
    }
}

 

附件为文件管理开发文档

分享到:
评论

相关推荐

    UPNP映射控制点源码

    1. 初始化:初始化UPNP控制点,查找并连接到网络中的UPNP设备。 2. 添加映射:接受内外端口号和协议类型(TCP或UDP),向指定的UPNP设备发送添加端口映射的请求。 3. 删除映射:根据内外端口号和协议类型,从UPNP...

    Upnp android 代码实现

    1. **初始化UPNP库**:在应用启动时,初始化UPNP库,设置监听端口和超时时间。 2. **设备搜索**:使用`M-SEARCH` SSDP请求来搜索网络中的UPNP设备,通常会定期进行。 3. **解析响应**:收到设备响应后,解析XML...

    UPnP编程指南

    在开始开发UPnP控制点之前,也需要完成一系列的初始化工作。 ##### 3.1.1、SDK初始化 初始化SDK的过程与开发设备类似,包括加载必要的库和设置环境变量等步骤。 ```c #include &lt;upnp/upnp.h&gt; int main() { ...

    delphi upnp 组件包 demo

    4. **BinaryLight.dpr**:项目源代码文件,这是Delphi应用程序的入口点,包含了程序的初始化和结束逻辑。 5. **BinaryLight.dsk**:可能是一个项目工作区文件,保存了关于项目窗口位置、布局和打开的文件的信息。 ...

    android 使用UPnP实现DLNA

    这些代码可能包括初始化UPnP库,创建设备搜索器,解析设备响应,以及与特定服务交互的函数调用。 在实际开发中,你可能还需要考虑性能优化、用户界面设计、多设备兼容性等问题。总的来说,Android平台上实现UPnP ...

    c# upnp 端口转发 实例

    1. **初始化UPnP设备**:首先,我们需要查找网络上可用的UPnP设备。这可以通过调用`UPnPDeviceFinder.FindByTypeAsync("urn:schemas-upnp-org:service:WANIPConnection:1")`来实现。 2. **选择设备**:从发现的设备...

    UPnP编程指南,DLNA技术,共享音乐

    根据需要初始化设备的其他组件,比如加载服务描述文件、设置事件处理器等。 **2.1.5 发布设备公告(Advertising the Device)** 设备启动后,需要通过SSDP协议向网络广播其存在。SDK提供了一个简单的API `...

    UPNP编程指南 Intel® SDK for UPnP™ Devices

    在编写UPnP设备之前,首先需要初始化SDK。这通常涉及到加载必要的库,设置配置参数,以及注册SDK的初始化回调函数。 ##### 2.1.2 设置根目录 设置根目录是必须的步骤,因为SDK需要知道在哪里查找设备描述文档和...

    UPNP源码例子

    在这个`UpnpTest`类中,我们创建了一个`Start`方法来初始化UPNP库,搜索网络中的设备。`Stop`方法则用于清理资源并停止搜索。`RegisterEventHandlers`方法应该包含用于处理设备发现事件的代码,这可能涉及到订阅...

    Upnp SDK +开发指南

    - 使用 SDK 创建设备实例:加载 XML 文件,通过 SDK 提供的函数初始化设备和服务。 - 控制点实现:编写控制点应用程序,扫描网络,发现并控制设备。 - 事件处理:订阅设备的事件,以便在状态变化时得到通知。 6....

    java实现UPnP的代码

    你可能需要查看源码,了解如何初始化UPnP设备和服务,如何处理控制点的请求,以及如何发送和接收事件。 此外,对于DLNA的扩展,你需要关注多媒体内容的元数据表示、内容格式转换、流媒体传输等方面。例如,你可能...

    cyperlink upnp 编程文档

    - 文件中提到了设备类的概述、描述、初始化、通知、嵌入式设备、服务、控制、事件和用户数据等方面,这些是UPnP™设备开发中需要关注的关键部分。 5. 控制点开发: - 控制点是指能够发现并控制网络上的UPnP™设备...

    UPnP编程指南.pdf

    1. 安装和初始化SDK,包括控制点应用相关的初始化。 2. 注册控制点。 3. 搜索感兴趣的服务。 4. 检索服务的详细描述。 5. 监视事件和调用动作。 6. 在不需要时关闭控制点。 为了实现多屏互动和DLNA(Digital Living...

    upnp for android

    然后,编写代码来初始化UPnP上下文,启动设备搜索,监听设备和服务的变化。例如,可以创建一个`UpnpService`实例,监听`UpnpServiceListener`事件来处理发现的设备。 为了进一步实现DLNA功能,你需要理解DLNA的相关...

    upnp-windows_Upnp端口映射_

    1. **初始化UPNP库**:首先,程序需要加载UPNP库并初始化相关结构。这可能涉及到调用UPNPAPI提供的函数,如`IGDDiscover`来发现网络上的通用即插即用设备,如路由器。 2. **获取路由器控制URL**:找到UPNP设备后,...

    UPnP编程指南 DLNA

    1. 安装和初始化:初始化SDK和相关控制点应用。 2. 搜索感兴趣的服务:通过控制点搜索网络上的服务。 3. 检索描述:获取感兴趣设备或服务的详细描述。 4. 监视事件:注册事件通知,以便获得设备状态的变化。 5. 调用...

    UPnP.rar_UPNP_ping

    - `main.cpp`:程序入口,可能包含了主循环和控制点的初始化。 - `UPnPClass.cpp/hpp`:自定义的UPnP类实现,封装了UPnP操作。 - `SSDPPacket.cpp/hpp`:用于解析和构建SSDP消息的类。 - `SOAPRequest.cpp/hpp`...

    UPnP Device Programming.doc

    在初始化和终止设备的流程中,`UpnpInit()`是关键的API函数,用于初始化UPnP SDK。在Linux环境中,如果用户没有指定IP地址,SDK会在初始化时自动从操作系统获取IP。这个过程包括设备的发现和广告消息的发送,以便...

    UPnP协议路由器端口映射DLL模块

    1. 初始化:查找并连接到UPnP网关。 2. 获取路由器信息:包括IP地址和网关信息。 3. 添加端口映射:指定内外端口、协议类型(TCP或UDP)、映射名称、持续时间等。 4. 删除端口映射:根据映射的公共端口移除映射规则...

Global site tag (gtag.js) - Google Analytics