研:解决app权限不够的问题,用udp socket 放在daemon里执行高权限操作

1.如何使用守护进程,,用init 开机启动。先创建socket ,等socket信号/数据来了,再去做其他事情。等app给发请求或数据。2. 我的问题:1.app最后到库里调用so里的某函数,setip(),我怎么让他去与守护进程里的具体SetIp()通信,让守护进程来做这件事情。直接sendto,readfrom呀。具体实现:代码片段client端:...
摘要由CSDN通过智能技术生成

1.如何使用守护进程,,

用init 开机启动。

先创建socket ,等socket信号/数据来了,再去做其他事情。等app给发请求或数据。

 

2. 我的问题:

1.app最后到库里调用so里的某函数,setip(),我怎么让他去与守护进程里的具体SetIp()通信,让守护进程来做这件事情。直接sendto,readfrom呀。

 

具体实现:

代码片段

client端:

发数据给server端。

#define MYPORT 8866 /*定义端口为8866*/
#define MAX_MSG_SIZE 1024

int socket_cli2serv(char* para)
{
	char* Ip;
	struct sockaddr_in addrSer;  //创建一个记录地址信息的结构体 
	struct sockaddr_in addrCli;//创建一个记录地址信息的结构体
	int Sockfd,n;//client socket ,socket port  SOCK_STREAM

	//创建一个套接字,并检测是否创建成功

	/*SockCli = socket(AF_INET, SOCK_DGRAM, 0);*/
	Sockfd = socket(AF_INET,SOCK_DGRAM , 0);

	if(Sockfd == -1){
		ADHOCLOG_SO("adhoc socket create failed!\n");
	}

	// server addr
	//struct sockaddr_in addrSer;  //创建一个记录地址信息的结构体 
	addrSer.sin_family = AF_INET;    //使用AF_INET协议族 
	addrSer.sin_port = htons(63450);     //设置地址结构体中的端口号
	addrSer.sin_addr.s_addr = inet_addr("127.0.0.1");  //设置通信ip
	/*addrSer.sin_addr.s_addr = inet_addr("192.168.70.1");  //设置通信ip*/

	//client addr  
	//struct sockaddr_in addrCli;//创建一个记录地址信息的结构体
	addrCli.sin_family = AF_INET;    //使用AF_INET协议族 
	addrCli.sin_port = htons(63451);     //设置地址结构体中的端口号
	addrCli.sin_addr.s_addr = inet_addr("127.0.0.1");  //设置通信ip

	//client port bind
	//将套接字地址与所创建的套接字号联系起来,并检测是否绑定成功
	socklen_t addrlen = sizeof(struct sockaddr);
	int res = bind(Sockfd,(struct sockaddr*)&addrCli, addrlen);
	if(res == -1){
		perror("bind failed!\n");
	}else{

		ADHOCLOG_SO("adhoc socket bind done!\n");
	}

  Ip=para;

  /*向serv端发送数据报*/
  n=sendto(Sockfd,Ip,strlen(Ip),0,(struct sockaddr *)&addrSer,sizeof(struct sockaddr));
  ADHOCLOG_SO("Ip:%s, sent %d bytes to %s\n",Ip,n,inet_ntoa(addrSer.sin_addr));

  close(Sockfd);
  return 0;
}

 

https://blog.csdn.net/delphiwcdj/article/details/7364343

server端;

做成守护进程,

/ 

int main()
{
	pid_t pid;
	char *buf = "This is a Daemon, wcdj\n";

	/* 屏蔽一些有关控制终端操作的信号
	 * 防止在守护进程没有正常运转起来时,因控制终端受到干扰退出或挂起
	 * */
	signal(SIGINT,  SIG_IGN);// 终端中断
	signal(SIGHUP,  SIG_IGN);// 连接挂断
	signal(SIGQUIT, SIG_IGN);// 终端退出
	signal(SIGPIPE, SIG_IGN);// 向无读进程的管道写数据
	signal(SIGTTOU, SIG_IGN);// 后台程序尝试写操作
	signal(SIGTTIN, SIG_IGN);// 后台程序尝试读操作
	signal(SIGTERM, SIG_IGN);// 终止

	// test
	//sleep(20);// try cmd: ./test &; kill -s SIGTERM PID


	// [1] fork child process and exit father process
	pid = fork();
	if(pid < 0)
	{
		perror("fork error!");
		exit(1);
	}
	else if(pid > 0)
	{
		exit(0);
	}

	// [2] create a new session
	setsid();

	// [3] set current path
	char szPath[1024];
	if(getcwd(szPath, sizeof(szPath)) == NULL)
	{
		perror("getcwd");
		exit(1);
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值