Android實現本機應用層與linux程式通訊

2021-08-27 19:59:23 字數 2210 閱讀 2229

最後經過研究,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協議 超...