在JavaME的網(wǎng)絡(luò)開發(fā)中,我們通常使用的兩種網(wǎng)絡(luò)通信協(xié)議是HTTP超文本傳輸協(xié)議和Socket套接字協(xié)議,但是由于HTTP是短連接,因此在某些
手機(jī)中可能會(huì)出現(xiàn)不斷出現(xiàn)連接網(wǎng)絡(luò)的提示,因此很多時(shí)候我們通過Socket來實(shí)現(xiàn)網(wǎng)絡(luò)連接。在Socket開發(fā)中,我們應(yīng)用的比較多的是手機(jī)端與手機(jī)端之間的通信,還有手機(jī)與服務(wù)器的通信。下面分別簡(jiǎn)單歸納下兩種通信的基本實(shí)現(xiàn)。
一、手機(jī)端與服務(wù)器端的Socket通訊
我們通常需要在手機(jī)中實(shí)現(xiàn)某些功能,而這些功能需要服務(wù)器提供服務(wù),因而在手機(jī)中需要建立與服務(wù)器之間的有效通信。在服務(wù)器端我們使用的是ServerSocket來創(chuàng)建服務(wù)socket,代碼如:ServerSocket server = new ServerSocket(4321);,這樣就打開了一個(gè)ServerSocket,然后我們使用ServerSocket的accept方法來監(jiān)聽客戶端建立的連接,該方法在沒有客戶端建立請(qǐng)求的時(shí)候會(huì)一直處于阻塞狀態(tài),直到有連接建立則形成Socket對(duì)象,服務(wù)器通常需要為多客戶端同時(shí)提供服務(wù),因此一般情況下,我們通過在一個(gè)循環(huán)中不斷監(jiān)聽客戶端連接,并為每一個(gè)連接創(chuàng)建一個(gè)線程提供獨(dú)立服務(wù)。
ServerSocket server = new ServerSocket(4321);
while(true)
{
socket = server.accept();
new ServerThread(socket).start();
}
然后在線程中打開socket的通信數(shù)據(jù)流與客戶端進(jìn)行通訊。
在JavaME中,與JavaSE的socket使用方式有些不同,在打開Socket連接的時(shí)候,使用的不是Socket,而是SocketConnection,并由JavaME中的網(wǎng)絡(luò)連接類Connector的open方法來建立socket連接,同時(shí),由于open方法返回的是Connection對(duì)象,因此需要將其轉(zhuǎn)化為SocketConnection對(duì)象。
SocketConnection sc = (SocketConnection) Connector.open("socket://127.0.0.1:4321");
這樣就打開了一個(gè)socket連接對(duì)象,然后通過獲取該socket的通信流就可以跟服務(wù)器之間進(jìn)行數(shù)據(jù)交換。
二、手機(jī)端與手機(jī)端之間的Socket通訊
有些開發(fā)應(yīng)用中,實(shí)現(xiàn)了手機(jī)與手機(jī)之間直接的通訊,這就需要讓一個(gè)手機(jī)作為服務(wù)端,而另一手機(jī)作為客戶端來處理,作為客戶端的Socket使用方法與以上(一)中相同,不同的主要是作為服務(wù)端的手機(jī)程序?qū)崿F(xiàn)。
同樣的,在JavaME中并不是通過ServerSocket來創(chuàng)建服務(wù)Socket的,而是通過ServerSocketConnection來實(shí)現(xiàn),并且一樣是通過Connector來打開連接,使用的方法是acceptAndOpen,具體實(shí)現(xiàn)如下:
ServerSocketConnection ssc = (ServerSocketConnection)Connector.open("socket://:1234");
SocketConnection sc = (SocketConnection)ssc.acceptAndOpen();
在得到SocketConnection對(duì)象之后便可以通過獲取相應(yīng)的socket數(shù)據(jù)流進(jìn)行通信。
DataInputStream dis = sc.openDataOutputStream();
DataOutputStream dos = sc.openDataInputStream();
以上為分別對(duì)手機(jī)與服務(wù)器端之間、手機(jī)與手機(jī)之間通過Socket進(jìn)行通訊的基本方法。
?
鳳凰涅槃/浴火重生/馬不停蹄/只爭(zhēng)朝夕
???? 隱姓埋名/低調(diào)華麗/簡(jiǎn)單生活/完美人生