最後經過研究,android已經給出了方案,就是localsocket方式,此處方式不同於一般的socket,沒有tcp與udp之分,是專門提**用程式與linux層通訊的方式,裡面封裝了socket的相關介面,使用起來也類似於socket方式。
[b] 一、客戶端關鍵**:[/b]
1.生成localsocketaddress物件,傳入服務名
public static final string service_name = "localsocketname";
localsocketaddress address = new localsocketaddress(service_name,namespace.reserved);
2.使用localsocket物件主動連線伺服器端
localsocket clientsocket = new localsocket();
clientsocket.connect(address);
注意:如果產生異常,比如服務不存在或localsocketaddress的引數不對,則連線不成功。
3.通過outputstream傳送資料
public static final string char_set = "gbk"; //字元編碼格式
string sendstr = "傳送給伺服器端";
outputstream outputstream = clientsocket.getoutputstream();
printwriter os = new printwriter(new outputstreamwriter(outputstream,char_set), false);
os.print(sendstr);
if ( os.checkerror() )
return true; //傳送成功
注意:為了使中文不為亂碼,應該採用gbk編碼;本**不能在ui執行緒中
4.通過inputstream接收來自伺服器的資料
char databuf = new char[1024]; //接收資料快取
inputstream inputstream = clientsocket.getinputstream();
inputstreamreader isr = new inputstreamreader(inputstream,char_set);
int count = isr.read(databuf);
if (count > 0)
注意:為了使中文不為亂碼,應該採用gbk編碼;本**不能在ui執行緒中
[b] 二、伺服器端配置:[/b]
1.在init.rc加入localsocket服務
service mylocalservice /system/bin/localsocketname
socket localsocketname stream 666 system system
oneshot
[b] 三、伺服器端關鍵**:[/b]
1.監聽來自客戶端的連線
#define socket_name "localsocketname"
...int fdsockt = -1;
int fd = -1;
fdsockt = android_get_control_socket(socket_name);
if (fdsockt >= 0)
}
2.接收來自客戶端的訊息
int bytenumber ;
char receivebuff[1024];
memset(receivebuff, 0, 1024);
if ( fd >=0 )
}
3.給客戶端返回訊息
char sendbuff[1024] = "傳送給客戶端";
if (fd >=0)
}
[b]四、將配置與伺服器端原始碼編譯進系統[/b]
由於localsocket服務需要編譯進原始碼裡才能啟動,故需要加入到android原始碼後編譯並刷機,重啟系統才能順利執行。
資料層與應用層分離
比如將資料庫查詢打包到乙個cdatabase類中,把查詢到的資料顯示到乙個列表控制項時,只要呼叫cdatabase類的乙個成員函式cdatabase initlistctrl clistctrl 在呼叫時,將目標的列表控制項的指標作為引數提供,在cdatabase initlistctrl clis...
Android網路優化 應用層策略
網路效能指標 1.建立連線的速度 2.傳輸速度 3.到達率 tcp ip底層已經有錯誤重傳機制,但是並不是專門為移動端設計的 4.長連線的存活率 優化切入口 1.dns優化 一般是優化的首選 使用httpdns替代localdns dns是指根據網域名稱查出ip位址,是http協議的前提,所以網路優...
表示層 應用層
表示層 功能 為異種機通訊提供一種公共語言,以便能進行互操作。這種型別的服務之所以需要,是因為不同的計算機體系結構使用的資料表示法不同。例如,ibm主機使用ebcdic編碼,而大部分pc機使用的是ascii碼。在這種情況下,便需要表示層來完成這種轉換。應用層 包含了通常要使用的協議 http協議 超...