`
kakarottoz
  • 浏览: 8224 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

采用list传输格式的webservice实现控制远程设备

阅读更多

        前些天在弄一个远程指令控制传感设备的程序,大体思路是这样的:用webservice作为中间服务程序,各平台作为客户端。客户端点击开启按钮调用webservice,webservice向传感设备发送开启指令,webservice和设备之间为TCP连接,分别为socketcliet和socketserver。二者会保持10秒的连接时间,传感设备数据会保存在webservice数据库中,10秒之后把数据封装成list传给平台客户端。如下图所示:


 

 

相关技术:

    webService:axis2框架,该框架相关部署不在赘述了

    数据库:mysql数据库

    采用线程池和NIO保证数据非阻塞

 

 

          当平台发送一条指令时会开启一个线程,该线程作为socket客户端与传感设备的路由(socketserver端)进行通信。线程都通过线程池进行管理,当与设备通信超时后(这里为10秒)会关闭该线程 重新放回池中。

          为防止socketclient端阻塞,socket采用NIO流进行传输,以防止阻塞的发生。

          webservice向平台返回数据采用list方式,将查询结果封装成model对象 再将model放到list,采用这种方式更利于表结构数据传输而且提高传输效率。下面是平台调用webservice的代码:

 

public class test {
	public static void main(String[] args) throws Exception{
		List<HashMap<String, Object>> returns = new ArrayList<HashMap<String, Object>>();
		RPCServiceClient serviceClient = new RPCServiceClient();
		Options options = serviceClient.getOptions();
		EndpointReference targetEPR = new EndpointReference("http://192.168.1.100:8080/XML/services/HelloWorld");
		options.setTo(targetEPR);
		QName opAddEntry = new QName("http://jdbc.mysql.com", "getList2");
		Object[] so = serviceClient.invokeBlocking(opAddEntry, new Object[] {"美女"},
				new Class[] {Object[].class });
		if (so.length > 0) {
			if (so[0] instanceof Object[]) {
				Object[] elements = (Object[]) so[0];
				for (Object o : elements) {
					HashMap<String, Object> maps = new HashMap<String, Object>();
					OMElementImpl ome = (OMElementImpl) o;
					maps.put(ome.getLocalName(), ome.getText());
					while (ome.getNextOMSibling() != null) {
						ome = (OMElementImpl) ome.getNextOMSibling();
						maps.put(ome.getLocalName(), ome.getText());
					}
					returns.add(maps);
				}
			} else {
				Object ob = so[0];
				if (ob instanceof OMElementImpl == false) {
					HashMap<String, Object> maps = new HashMap<String, Object>();
					maps.put("simple", ob);
					returns.add(maps);

				} else {
					OMElementImpl ome = (OMElementImpl) so[0];
					HashMap<String, Object> maps = new HashMap<String, Object>();
					maps.put(ome.getLocalName(), ome.getText());
					returns.add(maps);
				}

			}
			println(returns);
		} else {
			println(returns);;
		}
	}
	
	public static void println(List<HashMap<String, Object>> list) {
		for (HashMap<String, Object> maps : list) {
			System.out.println("------------------");
			Set<String> set = maps.keySet();
			Iterator<String> it = set.iterator();
			while (it.hasNext()) {
				String key = it.next();
				Object value = maps.get(key);
				System.out.print(key + ":" + value + "\t");
			}
			System.out.println();
		}
	}

}

 客户端所用jar包见下方。

webservice服务端方法如下:

 public List<Model> getList2(String mac) throws Exception{
    	List<Model> list = new ArrayList<Model>();
    	if(connect(1,mac)){
    		String sql="相应的sql";
        	Connection con = getConn();
        	Statement sta = con.createStatement();
        	ResultSet rs = sta.executeQuery(sql);
        	while(rs.next()){
        		Model m = new Model();
        		m.setTfShuL(rs.getInt("tfShuL"));
        		m.setTfMingC(rs.getString("tfMingC"));
        		m.setTfGuiG(rs.getString("tfGuiG"));
        		m.setTfPinM(rs.getString("tfPinM"));
        		m.setTfDaL(rs.getString("tfDaL"));
        		m.setTfZhuDW(rs.getString("tfZhuDW"));
        		list.add(m);
        	}
    	}
    	return list;
	}

 

  开启线程的connect方法如下:

public boolean connect(int machid,String mac) throws Exception{
		try{
			oz oz = new oz();
			oz.initClient("192.168.1.110", 8899,machid,mac);
			Thread td = new Thread(oz);
			pool.submit(td);             //线程池
			Thread.sleep(8000);              
			
		}catch(Exception e){
			System.out.println(e.getLocalizedMessage());
			return false;
		}
		return true;
		
	}

 

        oz是一个自己实现的线程对象,里面也实现了一个NIO的socket客户端,可与传感设备组成的网络进行通信。文件放在附件中。

         以上就是一个简单地通过webservice实现平台和硬件设备的通信实例,使用webservice可以适应多种平台 便于更新扩展同时便于数据的集中处理,其他好处想必大家日后会慢慢发现。。NIO可防止阻塞提高传输效率。

        还有很多问题有待解决,比如数据的排队问题、线程和socket的优化等等。欢迎大家多多指正

 


 

  • 大小: 84.2 KB
  • oz.zip (2.2 KB)
  • 下载次数: 10
0
0
分享到:
评论

相关推荐

    WebService技术在分布式开发中的应用与实现

    WebService技术的核心是使用网络上的标准协议和格式,进行远程过程调用(RPC)和通信。.NET平台提供了强大的工具和库来开发和实现WebService,本文将着重分析.NET下三种分布式开发技术:WebService、Remoting和MSMQ...

    通过webservice与android实现通信(C#与android)

    通过WebService与Android实现通信是跨平台开发中常见的一种方式,特别是在使用C#作为后端语言进行服务端开发,而Android应用作为前端时。本文将基于提供的文件信息,深入解析这一技术实现的关键步骤与原理。 ### ...

    Webservice实例

    在WebService中使用List,可以方便地传输一组相关数据。例如,服务端可以返回一个包含多个用户信息的List,每个用户信息都是一个包含姓名、年龄等字段的对象。 创建返回String的WebService: 1. 首先定义一个Java...

    webservice cxf spring整合返回list,bean,string,json,xml项目完整实例

    【标题】:在Java EE环境中,使用Apache CXF与Spring框架整合实现Web服务,返回List、Bean、String、JSON及XML的完整项目实例 【描述】:本项目旨在展示如何在Java企业级应用(Java EE)中,通过Apache CXF框架创建...

    Android配合WebService(包含包)

    本示例主要围绕Android如何利用Web Service(通常为SOAP或RESTful服务)来实现这一功能。标题提到的“Android配合WebService例子”意味着我们将探讨如何在Android应用中集成并使用Web Service。 首先,我们要了解...

    Flex+WebService开发实例

    3. 数据格式转换:Flex可以处理XML、JSON等多种数据格式,WebService返回的数据通常为XML,Flex中的XMLList和XML类提供了方便的解析和操作接口。 四、实例分析 在“flexandwebServicetest”项目中,我们可以看到一...

    webservice的使用

    在Android开发中,Web服务通常用于实现客户端应用与远程服务器之间的通信,以便获取或发送数据。本篇文章将深入探讨如何在Android应用中使用Web服务,特别是通过WebService获取相关信息。 一、Web服务的原理与类型 ...

    webService接口

    ##### 使用POJO实现0配置的WebService 以Axis2为例,创建一个不需要任何配置的WebService,首先需要下载并安装Axis2。下载地址为:[http://ws.apache.org/axis2/](http://ws.apache.org/axis2/),推荐使用最新版本...

    Android axis调用Webservice

    在Android开发中,有时我们需要与远程服务器进行交互,获取或发送数据。Web Service是一种常见的通信方式,而Axis2是Apache组织提供的一款强大的Web Service框架,它支持SOAP和RESTful服务。本文将详细介绍如何在...

    android访问远程数据库

    - **WebService**:一种更为复杂的远程调用技术,基于 SOAP 协议,可以实现跨平台、跨语言的服务调用。 #### 三、WebServer 的搭建 为了实现 Android 客户端与远程数据库之间的数据交换,我们需要先搭建一个 Web...

    Android如何使用WebService接口.docx

    首先,理解WebService的核心概念:它是一种基于SOAP(Simple Object Access Protocol)协议的远程调用标准,允许不同操作系统、编程语言和应用之间的数据交换。在OPhone或Android系统中,由于原生SDK并未提供调用...

    WebServiceDemo-Axis2

    RPC(远程过程调用)是Web服务的一种实现方式,它使调用者感觉就像在本地调用函数一样调用远程服务。在Axis2中,RPC风格的服务使得Java方法可以直接暴露为Web服务操作。在这个示例中,我们看到RPC方式被用来处理数据...

    Webservice axis 整理好的示例文档

    1. **即时发布JWS (Java Web Service)**:JWS是Java实现的Web服务模型,通过简单的注解如`@WebService`,开发者可以直接将Java类暴露为Web服务。发布JWS通常包括编写业务逻辑,添加注解,然后使用Java SE的`wsimport...

    Android与服务器端数据交互(基于SOAP协议整合android+webservice)_.docx

    这种方式不仅能够帮助开发者实现跨平台的远程服务调用,还能够在资源受限的移动设备上提供高效的数据交换能力。在实际应用开发过程中,可以根据具体需求调整上述代码示例,以更好地满足项目需求。

    使用KSOAP2调用WebService

    在Android平台上,调用Web服务通常涉及到与服务器端进行数据交换,而由于Android SDK并未内置对...通过理解并熟练掌握KSOAP2的基本用法,开发者能够轻松地集成和通信远程Web服务,从而实现跨平台的数据交换和功能扩展。

    Axis1.4_开发指南

    此外,Axis还支持传递包含内部类的自定义对象以及通过RMI方式实现远程调用。 ### 抛出异常和传递文件 在开发WebService时,服务可能会遇到错误或异常。Axis提供了一种机制,允许开发者在服务中抛出异常,并通过...

    Android与服务器端数据交互

    使用 WebService,我们可以将服务器端的方法暴露给客户端,使得客户端可以远程调用服务器端的方法,从而实现数据交互。 在 Android 中,我们可以使用 KSOAP 库来调用 WebService。KSOAP 库是一个基于 SOAP 协议的...

    .net面试题,连接开口了解

    - 手动创建WebService代理:这是一种底层方法,需要手动编写代码来实现与WebService的通信,包括生成SOAP请求和解析SOAP响应。 - 利用工具自动生成代理:Visual Studio等IDE提供了工具,可以自动从WSDL文件生成代理...

Global site tag (gtag.js) - Google Analytics