设为首页 加入收藏

TOP

在Android上使用LocalSocket实现上层Java和底层C++的通信(一)
2014-11-24 11:47:42 来源: 作者: 【 】 浏览:2
Tags:Android 使用 LocalSocket 实现 上层 Java 底层 通信

try {
LocalServerSocket server = new LocalServerSocket(SOCKET_ADDRESS);
while (true) {
//Log.i(TAG, "begin accept");
LocalSocket receiver = server.accept();
if (receiver != null) {
InputStream input = receiver.getInputStream();


byte[] bytes = new byte[4];
int size = input.read(bytes, 0, 4);
if(size!=4) Log.i(TAG, "received command len:" + String.valueOf(size));


int cmd_len = ((bytes[0] & 0xFF) << 24)|((bytes[1] & 0xFF) << 16)
|((bytes[2] & 0xFF) << 8)|(bytes[3] & 0xFF);


Log.i(TAG, "received cmd_len:"+String.valueOf(cmd_len));
if(cmd_len>0){
byte[] ArrayOfByte = new byte[cmd_len];
size = input.read(ArrayOfByte, 0, cmd_len);
Log.i(TAG, "received data len:" + String.valueOf(size));
Parcel parcel = Parcel.obtain();
parcel.unmarshall(ArrayOfByte, 0, ArrayOfByte.length);
parcel.setDataPosition(0);
processRequest(receiver,parcel);
}


}
}
} catch (IOException e) {
Log.e(getClass().getName(), e.getMessage());
}
private void sendResult(LocalSocket paramLocalSocket, Parcel paramParcel) throws IOException{
byte[] arrayOfByte1 = new byte[4];
byte[] arrayOfByte2 = paramParcel.marshall();
Log.i(TAG, "enter sendResult!");
arrayOfByte1[0] = 0;
arrayOfByte1[1] = 0;
arrayOfByte1[2] = (byte)(arrayOfByte2.length >> 8 & 0xFF);
arrayOfByte1[3] = (byte)(arrayOfByte2.length & 0xFF);


paramLocalSocket.getOutputStream().write(arrayOfByte1);
paramLocalSocket.getOutputStream().write(arrayOfByte2);
}


private void processRequest(LocalSocket paramLocalSocket, Parcel paramParcel)
{
int cmd = paramParcel.readInt();
//Log.i(TAG,"parcel:"+String.valueOf(cmd));
if(cmd>0&&cmd //String info = "unknown";
Parcel parcel_info = Parcel.obtain();
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
switch (cmd)
{
case CMMB_REQUEST_GET_IMSI:{
Log.i(TAG, "received CMMB_REQUEST_GET_IMSI command!");
/*
* 唯一的用户ID:
* 例如:IMSI(国际移动用户识别码) for a GSM phone.
* 需要权限:READ_PHONE_STATE
*/
String info = tm.getSubscriberId();//String
if(info!=null) Log.i(TAG, info);
parcel_info.writeInt(CMMB_REQUEST_GET_IMSI);
parcel_info.writeString(info);
}
break;
....
try {
sendResult(paramLocalSocket, parcel_info);
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e(getClass().getName(), e.getMessage());
e.printStackTrace();
}


}


以上是服务器端,下面是客户端
#define SOCKET_NAME_CMMB_SIM_C

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android4.0强制横屏竖屏 下一篇Android4.0隐藏状态栏

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·TCP/UDP协议_百度百科 (2025-12-26 12:20:11)
·什么是TCP和UDP协议 (2025-12-26 12:20:09)
·TCP和UDP详解 (非常 (2025-12-26 12:20:06)
·Python 教程 - W3Sch (2025-12-26 12:00:51)
·Python基础教程,Pyt (2025-12-26 12:00:48)