林春坤 陳耀華
摘要:該設(shè)計(jì)是基于Android平臺(tái)設(shè)計(jì)互聯(lián)網(wǎng)網(wǎng)關(guān)應(yīng)用,使局域網(wǎng)中的其他設(shè)備能夠通過網(wǎng)關(guān)設(shè)備的移動(dòng)通信接口接入互聯(lián)網(wǎng)。應(yīng)用Java語言分別編寫服務(wù)器端的程序和Android手持終端的客戶端程序,使之能從手持終端輸入信息,并發(fā)送到PC端服務(wù)器上。
關(guān)鍵詞:Android;網(wǎng)關(guān);Socket
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):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概述
隨著科技的發(fā)展,智能系統(tǒng)運(yùn)用到生活的產(chǎn)品越來越多。Android操作系統(tǒng)作為一個(gè)開源操作系統(tǒng),正在廣發(fā)地運(yùn)用到生活的各個(gè)方面,為人們提供更加便捷,舒適的生活體驗(yàn)。而基于Android系統(tǒng)的應(yīng)用開發(fā)也在廣泛地展開。
本設(shè)計(jì)是基于Android系統(tǒng)的互聯(lián)網(wǎng)網(wǎng)關(guān)應(yīng)用設(shè)計(jì)。在Android系統(tǒng)中,運(yùn)用Java語言進(jìn)行網(wǎng)絡(luò)編程,通過TCP Socket實(shí)現(xiàn)了PC端服務(wù)器和Android開發(fā)板之間的通信,使之能夠從Android系統(tǒng)的設(shè)備上輸入消息,發(fā)送到PC端服務(wù)器上,并在PC端服務(wù)器上顯示消息內(nèi)容,從而實(shí)現(xiàn)Android系統(tǒng)設(shè)備和PC的TCP Socket通信。
2 Android手機(jī)操作系統(tǒng)的介紹
Android操作系統(tǒng)是由Google公司在2007年11月宣布的基于Linux 2.6.29內(nèi)核的開源手機(jī)操作系統(tǒng),該系統(tǒng)主要由操作系統(tǒng)、中間件、用戶界面、和應(yīng)用程序軟件組成。Android操作系統(tǒng)采用了軟件堆層(software stack,又名以軟件疊層)的架構(gòu),主要由這四個(gè)部分組成。而底層Linux內(nèi)核只提供基本功能,至于其他的應(yīng)用軟件則由各公司各自進(jìn)行開發(fā),大部分的應(yīng)用程序都是以Java編寫為主。
2.1 Android操作系統(tǒng)的組成
Android操作系統(tǒng)是一個(gè)全新的開源手機(jī)操作系統(tǒng),該系統(tǒng)包含了非常多的開源代碼。Android操作系統(tǒng)主要由四層組成,如圖1所示,它們分別是:
第一層:Linux操作系統(tǒng)與底層的相關(guān)驅(qū)動(dòng)(主要由C語言實(shí)現(xiàn));
第二層:本地代碼框架(主要由C、C++實(shí)現(xiàn));
第三層:Java框架(由Java代碼實(shí)現(xiàn));
第四層:Java應(yīng)用程序(由Java代碼實(shí)現(xiàn))。
第一層與第二層之間,在Linux操作系統(tǒng)的角度看來,是內(nèi)核空間與用戶空間的分界線,第一層運(yùn)行與內(nèi)核空間,第二、三、四層運(yùn)行于用戶空間。
第二層與第三層之間,是本地代碼層和Java代碼層的接口。
第三層與第四層之間,是Android的系統(tǒng)API的接口,對(duì)Android應(yīng)用程序的開發(fā),第三層以下的內(nèi)容是不可見的。
Android的核心系統(tǒng)是基于Linux2.6.29的內(nèi)核,其中包括安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議棧與驅(qū)動(dòng)模型。Liunx內(nèi)核同時(shí)也作為硬件和軟件棧之間的抽象層。Android操作系統(tǒng)除了標(biāo)準(zhǔn)的Linux內(nèi)核外,該系統(tǒng)還需要增加內(nèi)核的驅(qū)動(dòng)程序,例如:聲卡驅(qū)動(dòng)、顯卡驅(qū)動(dòng)、輸入設(shè)備驅(qū)動(dòng)、藍(lán)牙驅(qū)動(dòng)、攝像頭驅(qū)動(dòng)、WiFi驅(qū)動(dòng)、電源管理、存儲(chǔ)器驅(qū)動(dòng)、觸摸驅(qū)動(dòng)等。
2.2 Android應(yīng)用程序的的組成
通常情況下,Android的應(yīng)用程序由以下4個(gè)部分組成:
1)活動(dòng)(Activity)
活動(dòng)(Activity)是Android應(yīng)用程序中一個(gè)最基本的組件,在Android應(yīng)用程序中,一個(gè)Activity可以是一個(gè)單獨(dú)的用戶界面。每一個(gè)Activity都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類,并從Activity的基類中繼承而來,Activity將會(huì)顯示由視圖控件(VIew)組成的用戶接口,并且對(duì)事件(Event)做出響應(yīng)。而在現(xiàn)實(shí)中,絕大部分的應(yīng)用程序都會(huì)有多個(gè)用戶界面,因此就會(huì)有多個(gè)相對(duì)應(yīng)的Activity。
2)廣播接收器(BroadcastReceiver)
廣播接收器(BroadcastReceiver)的作用是讓應(yīng)用程序?qū)σ粋€(gè)外部事件做出相關(guān)的響應(yīng)。例如:短信接收事件、可用的無線WIFI網(wǎng)絡(luò)連接通知、未接來電提醒、未閱電子郵件等。
3)服務(wù)(Service)
一個(gè)服務(wù)(Service)是一個(gè)沒有實(shí)際的用戶界面,但具有一段較長生命周期的程序。例如:比如我們打開手機(jī)的飛行模式,WIFI,未接來電轉(zhuǎn)接等服務(wù),都不能看到實(shí)際的用戶界面。
4)內(nèi)容提供者(Content Provider)
應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件或SQLite數(shù)據(jù)庫中,甚至是任何有效的設(shè)備中。當(dāng)需要將數(shù)據(jù)與其他的應(yīng)用共享時(shí),內(nèi)容提供者將會(huì)很有用。一個(gè)內(nèi)同提供者類實(shí)現(xiàn)了一組標(biāo)準(zhǔn)的方法,從而能夠讓其他應(yīng)用程序或讀取此內(nèi)容提供者處理的各種數(shù)據(jù)類型。
3網(wǎng)關(guān)設(shè)計(jì)原理
3.1 TCP Socket基本通信模型簡(jiǎn)介
Transmission Control Protocol傳輸控制協(xié)議(TCP)是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運(yùn)輸層(Transport layer)通信協(xié)議。由IETF的RFC 793說明(specified)。在簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能。通過TCP可以實(shí)現(xiàn)各種異構(gòu)網(wǎng)絡(luò)或異種機(jī)之間的互聯(lián)通信。
如果IP數(shù)據(jù)包中有已經(jīng)封好的TCP數(shù)據(jù)包,那么IP將把它們向‘上傳送到TCP層。TCP將包排序并進(jìn)行錯(cuò)誤檢查,同時(shí)實(shí)現(xiàn)虛電路間的連接。TCP數(shù)據(jù)包中包括序號(hào)和確認(rèn),所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。TCP將它的信息送到更高層的應(yīng)用程序,應(yīng)用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設(shè)備驅(qū)動(dòng)程序和物理介質(zhì),最后到接收方。
TCP Socket基本通信模型如圖2所示。
圖2 TCP Socket基本通信模型圖
3.2 Server與Client的設(shè)計(jì)思路
Server-Client程序設(shè)計(jì)基本框架如圖3所示。
圖3 Server-Client程序設(shè)計(jì)基本框架圖
3.2.1 PC服務(wù)器端(Server)的設(shè)計(jì)思路
1)用WSAStartup()函數(shù)檢查系統(tǒng)協(xié)議棧的安裝情況;
2)用socket()函數(shù)創(chuàng)建PC服務(wù)器端的套接口;
3)用bind()函數(shù)將創(chuàng)建的套接口與PC服務(wù)器IP地址綁定;
4)用listen()函數(shù)通過監(jiān)聽使PC服務(wù)器設(shè)定的端口準(zhǔn)備接收連接;
5)用accept()接收來自Android客戶端由connect()函數(shù)發(fā)出的連接請(qǐng)求;
6)建立連接后,用send()函數(shù)向Android客戶端發(fā)送數(shù)據(jù),PC服務(wù)器用recv()函數(shù)接收數(shù)據(jù);7)通信結(jié)束后,使用closesocket()函數(shù)關(guān)閉連接;
8)最后通過調(diào)用WSACleanup()函數(shù),結(jié)束Winsock Sockets API。PC服務(wù)器端主要代碼解析:
public class TCPDesktopServer implements Runnable{ public static final String SERVERIP = "192.168.2.40"; public static final int SERVERPORT =1234;
上面這段代碼主要作用是綁定PC端Server的IP地址和端口號(hào)。
public void run() {
try {
System.out.println("1.PC端服務(wù)器已啟動(dòng)");
System.out.println("");
System.out.println("2.等待Android客戶端連接,并接收消息......");
System.out.println("");
上面這段代碼主要作用是在DOS窗口中提示PC服務(wù)器啟動(dòng)情況。
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("出錯(cuò)了....."); e.printStackTrace();
}finally{
client.close();
上面這段代碼主要作用是創(chuàng)建一個(gè)新的ServerSocket對(duì)象,監(jiān)聽、捕捉通過Socket連接的客戶端,一直阻塞到有Android客戶端連接,應(yīng)用Socket創(chuàng)建BufferedReader對(duì)象,用于接收Socket Stream中的數(shù)據(jù),并顯示從Android客戶端接發(fā)送過來的消息。若過程中出現(xiàn)異常,就捕捉異常,最后斷開連接。
3.2.2 Android客戶端程序(Client)的設(shè)計(jì)思路
1)用WSAStartup()函數(shù)檢查系統(tǒng)協(xié)議棧的安裝情況;
2)用socket()函數(shù)創(chuàng)建Android客戶端的套接口;
3)用connect()函數(shù)發(fā)出也服務(wù)器建立連接的請(qǐng)求;
4)在建立連接后,用send()函數(shù)向PC端服務(wù)器發(fā)送數(shù)據(jù),Android客戶端用recv()函數(shù)接收數(shù)據(jù);
5)通信結(jié)束后,用closesocet()函數(shù)關(guān)閉套接口;
6)最后通過調(diào)用WSACleanup()函數(shù),結(jié)束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元素設(shè)定服務(wù)器的IP地址、和服務(wù)器所監(jiān)聽的端口號(hào)。
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元素對(duì)象,為btnsend設(shè)置點(diǎn)擊事件。
public void onClick(View bt)
{
try
{
String msg=edtmsgcontent.getText().toString();
if(!TextUtils.isEmpty(msg))
SendMsg(ip,port,msg);
else
{
Toast.makeText(this,"請(qǐng)先輸入要發(fā)送的消息.....",
Toast.LENGTH_LONG);
edtmsgcontent.requestFocus();
}}
catch (Exception e) {
// TODO Auto-generated catch block e.printStackTrace();
}}
上面這段代碼主要作用是通過onclick方法設(shè)定消息發(fā)送的IP地址和端口號(hào),還有消息的內(nèi)容。若沒有輸入消息,則提示:“請(qǐng)先輸入發(fā)送的消息……”。
4結(jié)論
系統(tǒng)操作效果如圖4所示。整個(gè)系統(tǒng)的設(shè)計(jì)可以滿足智能空間中對(duì)網(wǎng)絡(luò)的低成本、低復(fù)雜度和高可靠性的要求,可以極大地降低信息的冗余度,方便管理維護(hù)多分布、多種類的信息和任務(wù)。該系統(tǒng)在實(shí)驗(yàn)室中得到驗(yàn)證。
參考文獻(xiàn):
[1]韓超,梁泉.Android系統(tǒng)原理及開發(fā)要點(diǎn)詳解[M].北京:電子工業(yè)出版社, 2010:47-50.
[2]張利國,代聞,龔海平.Android移動(dòng)開發(fā)案例詳解[M].北京:人民郵電出版社, 2010:76-83.
[3] (美)希爾特.JAVA實(shí)用教程[M].4版.楊繼萍,譯.北京:清華大學(xué)出版社,2008:23-56.
[4](美)J.布洛克(Joshua Bloch. Effective Java中文版[M].潘愛民,譯.北京:機(jī)械工業(yè)出版社m2003.94-101,
[5]王吳迪,趙楓朝.Java開發(fā)與應(yīng)用教程[M].北京:電子工業(yè)出版社,2006.35-47.
[6]余志龍.Android SDK開發(fā)范例大全[M].北京:人民郵電出版社,2009:62-70.