APP下载

基于Android的互联网网关应用设计

2012-04-29林春坤陈耀华

电脑知识与技术 2012年23期
关键词:网关

林春坤 陈耀华

摘要:该设计是基于Android平台设计互联网网关应用,使局域网中的其他设备能够通过网关设备的移动通信接口接入互联网。应用Java语言分别编写服务器端的程序和Android手持终端的客户端程序,使之能从手持终端输入信息,并发送到PC端服务器上。

关键词:Android;网关;Socket

中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)23-5568-05

RFID Engine Design and Implementation Based on Complex Event Processing

LIN Chun-kun1, CHEN Yao-hua2

(1.Huizhou Public Security Bureau,Huizhou 516002,China;2.School of Mechanical and Electric Engineering, Guangzhou University, Guangzhou 510006, China)

Abstract: The design is based on the Android operating system, Java language and Eclipse development tools write two programs, namely Android_Client, PC_Server. PC_Server running as a server at the PC side, Android_Client devices in the Android operating system as a cli? ent, and systems to enable Android device from the input message, sent to the PC-server, in order to achieve the system devices and PC via Android TCP Socket Communication.

Key words: android; gateway; socket

1概述

随着科技的发展,智能系统运用到生活的产品越来越多。Android操作系统作为一个开源操作系统,正在广发地运用到生活的各个方面,为人们提供更加便捷,舒适的生活体验。而基于Android系统的应用开发也在广泛地展开。

本设计是基于Android系统的互联网网关应用设计。在Android系统中,运用Java语言进行网络编程,通过TCP Socket实现了PC端服务器和Android开发板之间的通信,使之能够从Android系统的设备上输入消息,发送到PC端服务器上,并在PC端服务器上显示消息内容,从而实现Android系统设备和PC的TCP Socket通信。

2 Android手机操作系统的介绍

Android操作系统是由Google公司在2007年11月宣布的基于Linux 2.6.29内核的开源手机操作系统,该系统主要由操作系统、中间件、用户界面、和应用程序软件组成。Android操作系统采用了软件堆层(software stack,又名以软件叠层)的架构,主要由这四个部分组成。而底层Linux内核只提供基本功能,至于其他的应用软件则由各公司各自进行开发,大部分的应用程序都是以Java编写为主。

2.1 Android操作系统的组成

Android操作系统是一个全新的开源手机操作系统,该系统包含了非常多的开源代码。Android操作系统主要由四层组成,如图1所示,它们分别是:

第一层:Linux操作系统与底层的相关驱动(主要由C语言实现);

第二层:本地代码框架(主要由C、C++实现);

第三层:Java框架(由Java代码实现);

第四层:Java应用程序(由Java代码实现)。

第一层与第二层之间,在Linux操作系统的角度看来,是内核空间与用户空间的分界线,第一层运行与内核空间,第二、三、四层运行于用户空间。

第二层与第三层之间,是本地代码层和Java代码层的接口。

第三层与第四层之间,是Android的系统API的接口,对Android应用程序的开发,第三层以下的内容是不可见的。

Android的核心系统是基于Linux2.6.29的内核,其中包括安全性、内存管理、进程管理、网络协议栈与驱动模型。Liunx内核同时也作为硬件和软件栈之间的抽象层。Android操作系统除了标准的Linux内核外,该系统还需要增加内核的驱动程序,例如:声卡驱动、显卡驱动、输入设备驱动、蓝牙驱动、摄像头驱动、WiFi驱动、电源管理、存储器驱动、触摸驱动等。

2.2 Android应用程序的的组成

通常情况下,Android的应用程序由以下4个部分组成:

1)活动(Activity)

活动(Activity)是Android应用程序中一个最基本的组件,在Android应用程序中,一个Activity可以是一个单独的用户界面。每一个Activity都被实现为一个独立的类,并从Activity的基类中继承而来,Activity将会显示由视图控件(VIew)组成的用户接口,并且对事件(Event)做出响应。而在现实中,绝大部分的应用程序都会有多个用户界面,因此就会有多个相对应的Activity。

2)广播接收器(BroadcastReceiver)

广播接收器(BroadcastReceiver)的作用是让应用程序对一个外部事件做出相关的响应。例如:短信接收事件、可用的无线WIFI网络连接通知、未接来电提醒、未阅电子邮件等。

3)服务(Service)

一个服务(Service)是一个没有实际的用户界面,但具有一段较长生命周期的程序。例如:比如我们打开手机的飞行模式,WIFI,未接来电转接等服务,都不能看到实际的用户界面。

4)内容提供者(Content Provider)

应用程序能够将它们的数据保存到文件或SQLite数据库中,甚至是任何有效的设备中。当需要将数据与其他的应用共享时,内容提供者将会很有用。一个内同提供者类实现了一组标准的方法,从而能够让其他应用程序或读取此内容提供者处理的各种数据类型。

3网关设计原理

3.1 TCP Socket基本通信模型简介

Transmission Control Protocol传输控制协议(TCP)是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议。由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。通过TCP可以实现各种异构网络或异种机之间的互联通信。

如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。TCP将它的信息送到更高层的应用程序,应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。

TCP Socket基本通信模型如图2所示。

图2 TCP Socket基本通信模型图

3.2 Server与Client的设计思路

Server-Client程序设计基本框架如图3所示。

图3 Server-Client程序设计基本框架图

3.2.1 PC服务器端(Server)的设计思路

1)用WSAStartup()函数检查系统协议栈的安装情况;

2)用socket()函数创建PC服务器端的套接口;

3)用bind()函数将创建的套接口与PC服务器IP地址绑定;

4)用listen()函数通过监听使PC服务器设定的端口准备接收连接;

5)用accept()接收来自Android客户端由connect()函数发出的连接请求;

6)建立连接后,用send()函数向Android客户端发送数据,PC服务器用recv()函数接收数据;7)通信结束后,使用closesocket()函数关闭连接;

8)最后通过调用WSACleanup()函数,结束Winsock Sockets API。PC服务器端主要代码解析:

public class TCPDesktopServer implements Runnable{ public static final String SERVERIP = "192.168.2.40"; public static final int SERVERPORT =1234;

上面这段代码主要作用是绑定PC端Server的IP地址和端口号。

public void run() {

try {

System.out.println("1.PC端服务器已启动");

System.out.println("");

System.out.println("2.等待Android客户端连接,并接收消息......");

System.out.println("");

上面这段代码主要作用是在DOS窗口中提示PC服务器启动情况。

ServerSocket serverSocket = new ServerSocket(SERVERPORT);

while (true) {

Socket client = serverSocket.accept();

//System.out.println("S: Receiving...");

try {

BufferedReader in = new BufferedReader(new

InputStreamReader(client.getInputStream()));

String str = in.readLine();

System.out.println("Android客户端:" + str);

}catch(Exception e){

System.out.println("出错了....."); e.printStackTrace();

}finally{

client.close();

上面这段代码主要作用是创建一个新的ServerSocket对象,监听、捕捉通过Socket连接的客户端,一直阻塞到有Android客户端连接,应用Socket创建BufferedReader对象,用于接收Socket Stream中的数据,并显示从Android客户端接发送过来的消息。若过程中出现异常,就捕捉异常,最后断开连接。

3.2.2 Android客户端程序(Client)的设计思路

1)用WSAStartup()函数检查系统协议栈的安装情况;

2)用socket()函数创建Android客户端的套接口;

3)用connect()函数发出也服务器建立连接的请求;

4)在建立连接后,用send()函数向PC端服务器发送数据,Android客户端用recv()函数接收数据;

5)通信结束后,用closesocet()函数关闭套接口;

6)最后通过调用WSACleanup()函数,结束Winsock Sockets API;

Android客户端代码解析:

public class main extends Activity implements OnClickListener{

/** Called when the activity is first created. */

private EditText edtmsgcontent;

private Button btnSend;

private String ip="192.168.2.40";

private int port=1234;

@Override

上面这段代码主要作用是定义声明需要用到的UI元素设定服务器的IP地址、和服务器所监听的端口号。

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//setContentView(R.layout.main);

InitView();

}

private void InitView()

{

setContentView(R.layout.main);

edtmsgcontent=(EditText)findViewById(R.id.msgcontent);

btnSend=(Button)findViewById(R.id.btnsend);

btnSend.setOnClickListener(this);

}

上面这段代码主要作用是显示主界面,通过id获取ui元素对象,为btnsend设置点击事件。

public void onClick(View bt)

{

try

{

String msg=edtmsgcontent.getText().toString();

if(!TextUtils.isEmpty(msg))

SendMsg(ip,port,msg);

else

{

Toast.makeText(this,"请先输入要发送的消息.....",

Toast.LENGTH_LONG);

edtmsgcontent.requestFocus();

}}

catch (Exception e) {

// TODO Auto-generated catch block e.printStackTrace();

}}

上面这段代码主要作用是通过onclick方法设定消息发送的IP地址和端口号,还有消息的内容。若没有输入消息,则提示:“请先输入发送的消息……”。

4结论

系统操作效果如图4所示。整个系统的设计可以满足智能空间中对网络的低成本、低复杂度和高可靠性的要求,可以极大地降低信息的冗余度,方便管理维护多分布、多种类的信息和任务。该系统在实验室中得到验证。

参考文献:

[1]韩超,梁泉.Android系统原理及开发要点详解[M].北京:电子工业出版社, 2010:47-50.

[2]张利国,代闻,龚海平.Android移动开发案例详解[M].北京:人民邮电出版社, 2010:76-83.

[3] (美)希尔特.JAVA实用教程[M].4版.杨继萍,译.北京:清华大学出版社,2008:23-56.

[4](美)J.布洛克(Joshua Bloch. Effective Java中文版[M].潘爱民,译.北京:机械工业出版社m2003.94-101,

[5]王吴迪,赵枫朝.Java开发与应用教程[M].北京:电子工业出版社,2006.35-47.

[6]余志龙.Android SDK开发范例大全[M].北京:人民邮电出版社,2009:62-70.

猜你喜欢

网关
基于改进RPS技术的IPSEC VPN网关设计
信号系统网关设备的优化
LTE Small Cell网关及虚拟网关技术研究
应对气候变化需要打通“网关”
一种实时高效的伺服控制网关设计
基于Zigbee与TCP的物联网网关设计