用WAP手機(jī)遠(yuǎn)程遙控電腦

2010-08-28 10:46:59來(lái)源:西部e網(wǎng)作者:

曾經(jīng)在報(bào)紙和雜志上多次見(jiàn)過(guò)討論遠(yuǎn)程控制計(jì)算機(jī)的文章,這些文章中使用的軟件大多是基于NetmeetingpcAnywhere的,這些軟件固然有它的優(yōu)點(diǎn),但他們完全依靠計(jì)算機(jī),并且服務(wù)器和客戶機(jī)之間必須足夠快的網(wǎng)速。假如坐在公共汽車上去控制家里的計(jì)算機(jī),舉著筆記本和一個(gè)GPRS手機(jī),恐怕就困難的多。有沒(méi)有一個(gè)更加方便的手段去遠(yuǎn)程控制計(jì)算機(jī)呢?前幾天剛申請(qǐng)了手機(jī)的WAP業(yè)務(wù),是否能通過(guò)手機(jī)的WAP瀏覽器控制計(jì)算機(jī)呢?我通過(guò)WAP網(wǎng)頁(yè)、ASP和VB實(shí)現(xiàn)了這套控制程序。

一、 WAP服務(wù)器的架設(shè)

要讓W(xué)AP成為手機(jī)和計(jì)算機(jī)交流的媒介,必選先建立一個(gè)WAP服務(wù)器。該服務(wù)器必須擁有獨(dú)立的IP地址,建議擁有獨(dú)立的域名,避免更改IP地址的麻煩,我使用的是花生殼動(dòng)態(tài)域名解析服務(wù)。

我所使用的服務(wù)器軟件是微軟的IIS6.0,操作系統(tǒng)是Microsoft Windows Server 2003。
在IIS平臺(tái)創(chuàng)建一個(gè)新的MIME類型。先選擇WAP站點(diǎn)的屬性,然后選擇“HTTP頭”標(biāo)簽。在“MIME類型”部分,點(diǎn)擊“MIME類型”并且新建以下信息:

擴(kuò)展名 MIME 類型
Wml text/vnd.wap.wml
Wmlc application/vnd.wap.wmlc
Wbmp image/vnd.wap.wbmp
wmlsc application/vnd.wap.wmlscriptc
Wmls text/vnd.wap.wmlscript
Wsc application/vnd.wap/wmlscriptc

完成以后,將會(huì)顯示以下幾種類型:

\

現(xiàn)在,你就可以把你的網(wǎng)站內(nèi)容加到站點(diǎn)文件夾里面了。

二、 WML語(yǔ)言

WML(Wireless Markup Language)是用于WAP的標(biāo)記語(yǔ)言。WML頁(yè)面文件的后綴是 *.WML,就象HTML的 *.HTML后綴。XML規(guī)定定義了一個(gè)規(guī)范的XML文件的規(guī)格。任何違反這個(gè)規(guī)定的WML文件會(huì)出錯(cuò)。WML文件通常使用XML解釋器起來(lái)解釋。

1、XML程序的基本結(jié)構(gòu)

一個(gè)完整的WML語(yǔ)言教程需要好幾十頁(yè),這些教程可以在網(wǎng)上找到,這里只大致介紹一些必要的知識(shí)。我們首先從一個(gè)簡(jiǎn)單的頁(yè)面開(kāi)始。

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.com/DTD/wml_1.1.xml">
<wml>
<card title="Fenghao">
<p>I'm fenghao</p>
</card>
</wml>

此程序在手機(jī)上顯示“I'm fenghao”。

WML語(yǔ)言是一個(gè)很嚴(yán)格的,哪怕一點(diǎn)不同都會(huì)導(dǎo)致錯(cuò)誤。所有的WML程序必須在文件的開(kāi)頭處聲明XML文件類型,包括XML的版本,WML的文檔類型、所用規(guī)范等。聲明形式如下:

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.com/DTD/wml_1.1.xml">

WML文檔是由“卡片(Card)”和“卡片組(Deck)”構(gòu)成的,一個(gè)Deck是一個(gè)或多個(gè)Card的集合。當(dāng)客戶端發(fā)出請(qǐng)求之后,WML即從網(wǎng)絡(luò)上把Deck發(fā)送到客戶瀏覽器,這是用戶就可以瀏覽Deck內(nèi)包含的所有Card,而不必從網(wǎng)上單獨(dú)下載每一個(gè)Card,程序中的第一個(gè)Card是缺省得可見(jiàn)的Card。

<xml>標(biāo)簽:該標(biāo)簽用于包含和定義WML的一個(gè)Deck。它有一個(gè)可選的xml:lang屬性來(lái)制定文檔的語(yǔ)言,比如<wml xml:lang="zh">表示文檔語(yǔ)言為中文。

<card>標(biāo)簽:WML均使用<card>和</card>進(jìn)行包含和定義。 <card>同時(shí)可以包含多個(gè)可選的屬性,
如:
card id="name" title="label" newcontext="false" ordered="true" onenterforwand="url" pmemterbackward="url" ontimer="url">。

2、WAP網(wǎng)頁(yè)的建設(shè)

以下的程序放在網(wǎng)站的首頁(yè)上,名字是index.wml,手機(jī)WAP瀏覽器將訪問(wèn)者個(gè)網(wǎng)頁(yè),并要求用戶輸入執(zhí)行操作的代碼,讓后將這個(gè)代碼傳送給resquest.asp。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>
<!-- Possible <head> element here. -->
<head>
<meta forua="true" http-equiv="Cache-Control" content="max-age=0"/>
<meta forua="true" http-equiv="Cache-Control" content="must-revalidate"/>
</head>
<template>
<!-- Template implementation here. -->
<do type="prev"><prev/></do>
</template>
<card id="card1" title="wap" newcontext="true">
<p>
<b>code:</b><br/>
<input name="SID" size="10" maxlength="50" type="text" format="*N" emptyok="true"/><br/>
<br/>
<anchor title="login">
<go href="request.asp" method="post">
<postfield name="code" value="$SID"/>
</go>Implement!<br/>
</anchor>
</p>
</card>
</wml>

其中,go主要用來(lái)定義瀏覽器需要導(dǎo)航的URL地址。語(yǔ)句<go href="request.asp" method="post">中,href屬性用于指定目標(biāo)URL地址;method屬性用于指定表單是以GET的方式還是post的方式遞交Postfield通過(guò)URL申請(qǐng)向ASP交換數(shù)據(jù)。<postfield name="code" value="$SID"/>中,name屬性用于指定傳輸域的名稱,value屬性用于定義傳輸?shù)闹。這兩個(gè)屬性均為必選屬性。

這里給大家一個(gè)建議,現(xiàn)在在網(wǎng)上有不少WML瀏覽器,例如WinWAP,這些瀏覽器有的時(shí)候是不嚴(yán)格的,有些網(wǎng)頁(yè)在WinWAP上可以瀏覽,可在手機(jī)上偏偏不行,往往是因?yàn)橐恍┘?xì)微的差錯(cuò)。所以在調(diào)試的時(shí)候注意手機(jī)和WML瀏覽器的配合,避免在手機(jī)上無(wú)法執(zhí)行時(shí)無(wú)從下手。

三、 服務(wù)器端

request.asp是響應(yīng)手機(jī)請(qǐng)求的服務(wù)器端程序,它獲得用戶輸入的操作代碼,讓后將這個(gè)代碼寫入一個(gè)文本文件。

<%@ Language=VBScript %>
<%Response.ContentType="text/vnd.wap.wml"
code=Request.Form("code")
filename="e:\code.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
set ss = fs.CreateTextFile(filename,true)
ss.Write(code)
ss.Close%><?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="main">
<p>
Complete!!!
</p>
</card>
</wml>

程序讀取e:\code.txt存入變量Lstr,然后將0寫入文本文件(規(guī)定0不代表任何操作,避免程序重復(fù)執(zhí)行同一操作)。最后通過(guò)判斷Lstr內(nèi)容來(lái)決定進(jìn)行什么操作,此處,利用API函數(shù)ExitWindowsEx強(qiáng)行關(guān)機(jī)(在不同的操作系統(tǒng)中,此API函數(shù)有不同的效果,不如在Win9x環(huán)境下可以執(zhí)行關(guān)機(jī),重新啟動(dòng)等操作,而在我的Windows2003 Server環(huán)境下,只能實(shí)現(xiàn)注銷,如果將ExitWindowsEx第二個(gè)參數(shù)設(shè)置其他的常量如EWX_REBOOT則不會(huì)有任何效果)。

當(dāng)然,遙控計(jì)算機(jī)不僅僅是要關(guān)機(jī)、重新啟動(dòng),更多的功能還等待去開(kāi)發(fā)!

好了一切都準(zhǔn)備就緒,現(xiàn)在開(kāi)啟你的服務(wù)器,拿出手機(jī),玩一把手機(jī)遙控的計(jì)算機(jī)!

\ \ \

調(diào)試環(huán)境:

操作系統(tǒng):Windows 2003 Enterprice Server

開(kāi)發(fā)環(huán)境:Visual Basic 6.0

手機(jī):PHILIPS Fisio 620 Openwave Mobile Browser 5.0.1.11 WAP Edition

運(yùn)營(yíng)商:中國(guó)移動(dòng)(動(dòng)感地帶) 中國(guó)網(wǎng)通LAN寬帶

域名解析:花生殼2.0

關(guān)鍵詞:WAP

贊助商鏈接: