Generic Connection Framework(以下簡稱GCF)是在CLDC中定義的,由於移動信息設備的資源受限特征,所以Java.Net和Java.io包不合適在這裡應用。現實世界中應用著各種各樣的網絡通信協議,這使得設計好這個框架非常不輕易,至少我是這麼認為的。然而當我們分析GCF的時候可以明白地發明它有如下幾個特征:基於接口設計,便於擴大、供給創立連接的工廠方法、應用尺度URL簡化了程序員的工作。當我們觀察CLDC1.1的api的時候我們可以發明其中定義了8個接口、一個Connector類和一個ConnectionNotFoundException異常。在MIDP2.0中進行了擴大,供給了 HttpConnection、HttpsConnection接口,這樣使得MIDlet具備了通過Http或者Https協議與server通信的才能,供給了SocketConnection、ServerSocketConnection、UDPDatagramConnection接口,使得 MIDlet能夠在TCP/IP層通過socket進行通信或者應用數據報進行通信的才能。至於CommConnection以及PUSH技巧在這裡不講述。
聯合GCF的接口層次圖來懂得通用聯網框架是最好的措施,下面我們看看它的層次結構。
最上層的接口是Connection,其他的接口都從他那裡持續。在Connection中只定義了一個方法close()。在我們的現實世界中通常應用的是分組數據交換和電路交換,因此在聯網框架中相應的定義了DatagramConnection和StreamConnection。由於在基於傳播輸中我們需要對輸進流和輸出流通是具有把持的才能,因此StreamConnection擴大了InputConnection和 OutputConneciton,我們經常應用的Conn.openInputStream(),conn.openOutputStream()方法都是在這兩個重要的接口中定義的。StreamConnectionNotifier接口定義了連接*********應當具備的才能,它的方法 acceptAndOpen()方法返回一個StreamConnection類型的連接,ServerSocketConnection持續了 StreamConnectionNotifIEr接口,這樣假如你做socket server的時候就可以通過應用這樣的URL,socket://:port在你的設備上建立監聽端口等候連接。SocketConnection持續了StreamConnection正好可以和ServerSocketConnection交相照映。UDPDatagramConnection則是為了在分組數據交換中應用,他持續了DatagramConnection接口。ContentConnection接口中只定義了三個方法 getEncoding(),getLength()和getType(),我們非常熟悉的HttpConnection就是他的子類,在 HttpConnection中定義了大批的把持,Http聯網功效也是MIDP規范中請求廠商必需支撐的連接方法。現在你應當對層次比擬明白了吧,持續往下看如何應用GCF。
GCF的是應用非常簡略,重要集中在Connector的open()方法上。我們要做的就是供給一個尺度的URL參數傳遞給open方法,例如為了得到一個HttpConnection我們應當寫類似下面的代碼:
String url = “http://myip:myport/myservlet”;
HttpConnection httpConn = (HttpConnection)Connector.open(url);
我們應當明白這個URL的格局如何定義的,有愛好的話你可以參考RFC2396,我這裡只列進他的基礎格局:{scheme}:[{target}][{parms}] ,針對不同的網絡通信方法,你要做的就是寫出不同的URL,並通過強迫轉換得到你需要的連接類型。這篇文章不供給如何進行數據傳輸的把持,你可以參考MIDP API文檔中HttpConnection接口中的具體闡明,也可以參考開發J2ME聯網利用程序,在數據傳輸結束後不要忘記封閉連接,這時候你就應當應用Connection中定義的close()方法了。
try {
// Here close any open streams
conn.close();
} catch (IOException ioe) {
// Handle the exception.
// Throw the exception, ignore it, or return an error.
}
至此,關於GCF的整體先容就結束了。我們應當明白GCF的接口層次關系、把握如何應用GCF。同時不要忘記把這個框架的設計銘記於心,事實上我感到CLDC和MIDP中許多設計都值得我們往多多的思考。