曾經在報紙和雜志上多次見過讨論遠端控制計算機的文章,這些文章中使用的軟體大多是基于
Netmeeting和
pcAnywhere的,這些軟體固然有它的優點,但他們完全依靠計算機,并且伺服器和客戶機之間必須足夠快的網速。假如坐在公共汽車上去控制家裡的計算機,舉着筆記本和一個GPRS手機,恐怕就困難的多。有沒有一個更加友善的手段去遠端控制計算機呢?前幾天剛申請了手機的WAP業務,是否能通過手機的WAP浏覽器控制計算機呢?我通過WAP網頁、ASP和VB實作了這套控制程式。
一、 WAP伺服器的架設要讓WAP成為手機和計算機交流的媒介,必選先建立一個WAP伺服器。該伺服器必須擁有獨立的IP位址,建議擁有獨立的域名,避免更改IP位址的麻煩,我使用的是花生殼動态域名解析服務。
我所使用的伺服器軟體是微軟的IIS6.0,作業系統是Microsoft Windows Server 2003。
在IIS平台建立一個新的MIME類型。先選擇WAP站點的屬性,然後選擇“HTTP頭”标簽。在“MIME類型”部分,點選“MIME類型”并且建立以下資訊:
擴充名 | 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 |
完成以後,将會顯示以下幾種類型:
現在,你就可以把你的網站内容加到站點檔案夾裡面了。
二、 WML語言WML(Wireless Markup Language)是用于WAP的标記語言。WML頁面檔案的字尾是 *.WML,就象HTML的 *.HTML字尾。XML規定定義了一個規範的XML檔案的規格。任何違反這個規定的WML檔案會出錯。WML檔案通常使用XML解釋器起來解釋。
1、XML程式的基本結構
一個完整的WML語言教程需要好幾十頁,這些教程可以在網上找到,這裡隻大緻介紹一些必要的知識。我們首先從一個簡單的頁面開始。
<?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> |
WML語言是一個很嚴格的,哪怕一點不同都會導緻錯誤。所有的WML程式必須在檔案的開頭處聲明XML檔案類型,包括XML的版本,WML的文檔類型、所用規範等。聲明形式如下:
<?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)”構成的,一個Deck是一個或多個Card的集合。當用戶端送出請求之後,WML即從網絡上把Deck發送到客戶浏覽器,這是使用者就可以浏覽Deck内包含的所有Card,而不必從網上單獨下載下傳每一個Card,程式中的第一個Card是預設得可見的Card。
<xml>标簽:該标簽用于包含和定義WML的一個Deck。它有一個可選的xml:lang屬性來制定文檔的語言,比如<wml xml:lang="zh">表示文檔語言為中文。
<card>标簽:WML均使用<card>和</card>進行包含和定義。 <card>同時可以包含多個可選的屬性,
如:
card id="name" title="label" newcontext="false" ordered="true" onenterforwand="url" pmemterbackward="url" ontimer="url">。
2、WAP網頁的建設
以下的程式放在網站的首頁上,名字是index.wml,手機WAP浏覽器将通路者個網頁,并要求使用者輸入執行操作的代碼,讓後将這個代碼傳送給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主要用來定義浏覽器需要導航的URL位址。語句<go href="request.asp" method="post">中,href屬性用于指定目标URL位址;method屬性用于指定表單是以GET的方式還是post的方式遞交Postfield通過URL申請向ASP交換資料。<postfield name="code" value="$SID"/>中,name屬性用于指定傳輸域的名稱,value屬性用于定義傳輸的值。這兩個屬性均為必選屬性。
這裡給大家一個建議,現在在網上有不少WML浏覽器,例如WinWAP,這些浏覽器有的時候是不嚴格的,有些網頁在WinWAP上可以浏覽,可在手機上偏偏不行,往往是因為一些細微的差錯。是以在調試的時候注意手機和WML浏覽器的配合,避免在手機上無法執行時無從下手。
三、 伺服器端request.asp是響應手機請求的伺服器端程式,它獲得使用者輸入的操作代碼,讓後将這個代碼寫入一個文本檔案。
<%@ 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不代表任何操作,避免程式重複執行同一操作)。最後通過判斷
Lstr内容來決定進行什麼操作,此處,利用API函數
ExitWindowsEx強行關機(在不同的作業系統中,此API函數有不同的效果,不如在Win9x環境下可以執行關機,重新啟動等操作,而在我的Windows2003 Server環境下,隻能實作登出,如果将
ExitWindowsEx第二個參數設定其他的常量如EWX_REBOOT則不會有任何效果)。
當然,遙控計算機不僅僅是要關機、重新啟動,更多的功能還等待去開發!
好了一切都準備就緒,現在開啟你的伺服器,拿出手機,玩一把手機遙控的計算機!
調試環境:
作業系統:Windows 2003 Enterprice Server
開發環境:Visual Basic 6.0
手機:PHILIPS Fisio 620 Openwave Mobile Browser 5.0.1.11 WAP Edition
營運商:中國移動(動感地帶) 中國網通LAN寬帶
域名解析:花生殼2.0