编写一个简单系统服务,功能很简单,接受命令,返回字符串。
需要在init.rc中定义服务的镜像名称和socket资源
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/poll.h>
#include <sys/wait.h>
#include <netdb.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include <arpa/inet.h>
#include <linux/if_pppopns.h>
#include <android/log.h>
#include <cutils/sockets.h>
static void log_print(int level, char *format, ...)
{
if (level >= 0 && level <= LOG_MAX) {
static int levels[5] = {
ANDROID_LOG_DEBUG, ANDROID_LOG_INFO, ANDROID_LOG_WARN,
ANDROID_LOG_ERROR, ANDROID_LOG_FATAL
};
va_list ap;
va_start(ap, format);
__android_log_vprint(levels[level], "usbmac_native", format, ap);
va_end(ap);
}
}
static int get_control()
{
int i;
if ((i = android_get_control_socket("usbmac")) == -1) {
return -1;
}
log_print(DEBUG, "Waiting for control socket");
int control;
if (listen(i, 1) == -1 || (control = accept(i, NULL, 0)) == -1) {//listen to socket ,max connetion num is 1
log_print(FATAL, "Cannot get control socket");
exit(1);
}
close(i);
fcntl(control, F_SETFD, FD_CLOEXEC);
return control;
}
static void receive(int control, int *argc, char ***argv)
{
static char *args[256];
int i;
args[0] = (*argv)[0];
for (i = 1; i < 256; ++i) {
unsigned char length;
if (recv(control, &length, 1, 0) != 1) {
log_print(FATAL, "Cannot get data length");
exit(1);
}
if (length == 0xFF) {
break;
} else {
int offset = 0;
args[i] = malloc(length + 1);
while (offset < length) {
int n = recv(control, &args[i][offset], length - offset, 0);
if (n > 0) {
offset += n;
} else {
log_print(FATAL, "Cannot get data value");
exit(1);
}
}
args[i][length] = 0;
log_print(DEBUG, "args[%d]=%s", i, args[i]);
}
}
log_print(DEBUG, "Received %d arguments", i - 1);
*argc = i;
*argv = args;
}
int main(int argc, char **argv)
{
int control = get_control();
while(1) {
receive(control, &argc, &argv);
if (argc -1 < 1) {
send(control, &code[0], 1, 0);//n
continue;
}
log_print(DEBUG, " %s",argv[2]);
}
close(control);
signal(SIGHUP, interrupt);
signal(SIGINT, interrupt);
signal(SIGTERM, interrupt);
signal(SIGCHLD, interrupt);
signal(SIGPIPE, SIG_IGN);
atexit(interrupt);
return 0;
}
分享到:
相关推荐
通过Socket.io与Node.js进行React Native通信的工作演示。这是在采用另一个项目之前将RN应用程序与Socket.io链接的试验。 怎么跑 Node.js服务器: 需要Node.js,Express.js,Socket.io,Ngrok CD服务器 DEBUG =...
React-native-chat-app 使用socket.ioReact本机简单聊天应用程序。 截屏 聊天画面 服务器入门 要获得有关Socket.io入门的帮助,请查看在线。 1. 2.克隆存储库 $ ...
在客户端,你可以使用`socket.io-client`库,这个库通常用于JavaScript运行环境,如浏览器或React Native等,但也有针对Java和Android的实现,如你提到的`socket.io-client-0.5.0.jar`。 在Java或Android项目中,`...
在framework层,由于涉及到更底层的操作,通常我们会使用JNI(Java Native Interface)配合C/C++代码来创建Socket服务器。首先,在JNI方法中调用`socket()`创建一个监听套接字,并使用`bind()`和`listen()`设置监听...
React-Native-Chat-App是一个基于React Native框架构建的移动聊天应用示例,结合了Socket.io、ExpressJS和MongoDB来实现实时通信和数据存储。这个项目不仅展示了React Native在跨平台移动开发中的强大功能,还揭示了...
You’ll also build server-side code for a mobile React Native app to talk to using the popular Node.js and Socket.io library, providing you a holistic view of things even beyond React Native....
《探花交友APP:基于React-Native框架的开发实践》 React-Native是Facebook推出的一款开源框架,它允许开发者使用JavaScript编写原生移动应用。在本文中,我们将深入探讨如何利用React-Native来构建“探花交友APP”...
【速捷即时通讯(speedy-im):基于uni-app与uni-socket.io的构建】 speedy-im是一个已停止更新的即时通讯项目,它利用了uni-app框架和uni-socket.io库来实现跨平台的实时通信功能。uni-app是一个由ECharts团队开发...
然而,由于其非原生的特性,可能会遇到性能问题,这在React Native、Flutter等框架中也同样存在。本文将探讨uni-app的运行原理,以及如何从这些原理出发解决性能优化问题。 首先,uni-app的运行机制涉及到逻辑层和...
My-React-Native-App 基于expo搭建的React Native+Node.js+ts仿闲鱼(项目代号:闲猪)项目 技术栈 前端采用ts,基于搭建(通用的React应用程序框架和平台,围绕React Native和native平台的工具集),表单采用,状态...
本项目“chat-app-react-native”是一个基于React Native的实时聊天应用程序,它展示了如何利用JavaScript和React Native的组件化思想来创建一个功能完备的聊天应用。下面,我们将详细探讨这个项目中的关键技术和...
该存储库涵盖了使用React Native和MERN堆栈实现的3个主要平台的主要是Android,IOS和Web :fire: 。您可以在此存储库中看到以下功能正在运行, 即时和实时文本一对一聊天用户的在线/离线可用性上次查看时间未读邮件...
使用React和socket.io聊天应用程序这个应用程序是基本的聊天应用程序,不包含数据库,它是React和socket.io的重点开始安装 git clone ... 有两个文件需要正确如下src / components / Main.js --->...
npx react-native init mobile-chat-app --template react-native-template-typescript ``` 这会生成一个预配置的项目,已经包含了TypeScript的支持。 ### 4. 设计UI组件 聊天应用的核心组件可能包括:输入框、...
目录构建世博会的“独立”应用从Create React Native App弹出构建依赖关系(Xcode和Android Studio) 我应该使用ExpoKit吗? 故障排除联网iOS模拟器无法打开QR码不扫描 更新到新版本您只需要很少(理想情况下永远不...
该示例已移至。 这是一个示例程序,显示了如何使用从... 编辑app.py和app_mysql.py的unix_socket ,以指向与您在步骤1中使用的应用程序相关联的Cloud SQL实例。 上载应用: appcfg.py update .贡献变化参见发牌参见
- **Socket.IO**:基于WebSocket的一个JavaScript库,它可以轻松地在浏览器和Node.js之间建立实时双向事件驱动的通信,广泛应用于即时通讯应用的开发。 3. **后端服务**: - **Node.js**:作为后端服务的开发语言...
1. 前端开发:使用React Native或Flutter进行跨平台的移动端应用开发,以实现安卓和iOS的兼容性。 2. 后端架构:可能采用Node.js、Django或Spring Boot等技术搭建后端服务器,处理用户请求、数据存储和匹配算法。 3....
我尝试使用mongo,express,React-native,node.js和socket.io创建实时聊天应用程序 具有各种功能的全栈式社交媒体应用程序:完整的CRUD功能(您可以创建,搜索,过滤,编辑和删除用户帐户,消息,公共聊天室,私人...