Android Socket学习(一)unix_socket

Andorid进程间通信之 UNIX SOCKET UNIX SOCKET实现进程间通信 阅读详情

查看socker命令

 netstat -an | grep "xx"

unix_socket_service.c

#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>

#define MAXLINE 80

char *socket_path = "server-socket";

int main()
{
    struct sockaddr_un serun, cliun;
    socklen_t cliun_len;
    int listenfd, connfd, size;
    char buf[MAXLINE];
    int i, n;

    if ((listenfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
        perror("socket error");
        exit(1);
    }

    memset(&serun, 0, sizeof(serun));
    //本地socket
    serun.sun_family = AF_UNIX;
    strncpy(serun.sun_path, socket_path, sizeof(serun.sun_path) - 1);
    //这个相当于把之前的地址要移除,不然上一个server没有结束,移除会报错already in use
    unlink(socket_path);

    if (bind(listenfd, (struct sockaddr *)&serun, sizeof(struct sockaddr_un)) < 0) {
        perror("bind error");
        exit(1);
    }
    printf("UNIX domain socket bound\n");

    if (listen(listenfd, 20) < 0) {
        perror("listen error");
        exit(1);
    }
    printf("Accepting connections ...\n");

    while(1) {
        cliun_len = sizeof(cliun);
        //判断是否有新的链接
        if ((connfd = accept(listenfd, (struct sockaddr *)&cliun, &cliun_len)) < 0){
            perror("accept error");
            continue;
        }
        printf("new client connect to server,client sockaddr === %s \n",((struct sockaddr *)&cliun)->sa_data);
        while(1) {
            memset(buf, 0, sizeof(buf));
            n = read(connfd, buf, sizeof(buf));
            if (n < 0) {
                perror("read error");
                break;
            } else if(n == 0) {
                printf("EOF\n");
                break;
            }
            printf("received: %s\n", buf);

            if(strncmp(buf,"exit",4) == 0) {
                printf("client disconnect \n");
                break;
            }
            for(i = 0; i < n; i++) {
                buf[i] = toupper(buf[i]);
            }
            write(connfd, buf, n);
        }
        //关闭当前链接
        close(connfd);
    }
    close(listenfd);
    return 0;
}


unix_socket_client.c

#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>

#define MAXLINE 80

char *client_path = "client-socket";
char *server_path = "server-socket";

int main() {
        struct  sockaddr_un cliun, serun;
        int len;
        char buf[100];
        int sockfd, n;

        if ((sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0){
                perror("client socket error");
                exit(1);
        }

    memset(&serun, 0, sizeof(serun));
    //本地socket
    serun.sun_family = AF_UNIX;
    strncpy(serun.sun_path,server_path ,
                   sizeof(serun.sun_path) - 1);
    //链接
    if (connect(sockfd, (struct sockaddr *)&serun, sizeof(struct sockaddr_un)) < 0){
        perror("connect error");
        exit(1);
    }
	
    printf("please input send char:");
    
    while(fgets(buf, MAXLINE, stdin) != NULL) {
	
         write(sockfd, buf, strlen(buf));
         n = read(sockfd, buf, MAXLINE);
         if (n < 0) {
            printf("the other side has been closed.\n");
         } else if(n==0) {
            printf("exit.\n");
            break;
         } else {
            printf("received from server: %s \n",buf);
         }
         printf("please input send char:");
    }
    close(sockfd);
	
    return 0;
}



接下来在linux中可以用 gcc命令对其编译

gcc unix_socket_service.c -o unix_socket_service
gcc unix_socket_client.c -o unix_socket_client

编译成功后可以运行

 关于unix_socket的背景这里放一篇链接

Android Framework实战开发视频--跨进程通信之Socket通信_learnframework的博客-优快云博客

放两篇吧  第二篇是ip的socket

Android Framework实战开发视频--跨进程通信之Socket通信_learnframework的博客-优快云博客

本文代码也是基于本篇提供的基本代码编写的

epoll的写法参考这篇

Android Framework实战开发-跨进程通信之 epoll详细讲解_learnframework的博客-优快云博客

Android三方APK通过Socket执行Shell命令:架构设计与避坑指南 在Android开发中,进程间通信(IPC)是实现模块解耦和功能扩展的核心技术。其原理是通过特定机制在不同进程间传递数据和指令,Binder、Socket等都是常见实现方式。Socket作为一种古老而通用的IPC技术,因其跨平台、协议灵活和权限分离清晰的特点,在需要突破Android应用沙箱、实现高权限操作的场景中展现出独特价值。例如,在设备管理、自动化测试等工程实践中,常需让普通应用代理执行系统级Shell命令。通过构建基于Socket的客户端-服务端模型,可将高权限逻辑隔离在独立进程中,实现安全可控的命 阅读详情

相关推荐

Android 为什么AMS通知Zygote进程fork是用Socket通信

前言 UNIX上C++程序设计守则3 准则3:多线程程序里不准使用fork 总结 Binder通讯是需要多线程操作的,代理对象对Binder的调用是在Binder线程,需要再通过Handler调用主线程来操作。 比如AMS与应用进程通讯,AMS的本地代理IApplicationThread通过调用ScheduleLaunchActivity,调用到的应用进程ApplicationThread的ScheduleLaunchActivity是在Binder线程,需要再把参数封装为一个ActivityC

qq_36191896的博客 3170

安卓跨进程通信-Socket通信

找到一个有执行shell权限的程序,然后和这个程序进行一个跨进程通信,app把要执行的命令发送给这个高权限的程序,程序就会执行app发送过来的命令,这个时候再跨进程返回结果给app既可以;主要把main.cpp覆盖到项目的:system/core/adb/daemon/main.cpp 然后在重新编译系统:make。编译步骤:1 :make rootServer //成功会生成rootServer到system/bin/ 下面。2 :接下来就是要让rootServer打包到img,

m0_46857231的博客 682

Android客户端使用Socket完成进程间通信

使用传统的socket方式实现Android进程间的通信。 有别于Android系统自身的AIDL的通信方式。 下载即可运行。 项目为Eclipse下的,下载注意非AndroidStudio; 下载分数为1分,评论后即可返回。

android unix socket,unix socket实现进程通信

2017-5-10需求:arm与stm32在android平台中通信,串口由stm操作,由arm发送指令给stm,并接受stm的数据。为什么要使用UnixDomainSocket:Unix Socket是一种Socket方式实现进程间通信(IPC)的功能,与普通的网络socket相比,不需要进行复杂的数据打包拆包,校验和计算验证,不需要走网络协议栈,而且安全可靠(官方说明)。方法:socket的其...

weixin_42318815的博客 776

Android简简单单实现Socket通信(逆天系列)

所有代码都封装好了,只需填写IP、端口就可以进行连接了。

Docker网络冲突?手把手教你解决Dify社区版无法访问172.18.0.0网段的问题

本文详细解析了在部署Dify社区版时,因Docker默认网段与局域网冲突导致无法访问172.18.0.0网段的问题。通过剖析Docker网络原理,提供了修改Docker守护进程默认地址池的根治方案,并介绍了在Compose文件中指定自定义网络等备选方法,帮助用户彻底解决网络冲突,保障服务稳定运行。

p8q9r0的博客 485

android 中JNI开发中如何使用Socket

网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。     什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络

Yu的专栏 5238

AMESim柱塞泵建模全指南:从HCD库搭建到联合仿真

液压系统仿真中,轴向柱塞泵的建模始终是难点与热点。柱塞泵结构紧凑、功率密度高,在工程机械与航空航天领域应用广泛,然而其运动学与流体细节深度耦合,给仿真带来不小挑战。AMESim平台中的HCD库提供了一种从物理结构出发的建模思路,将柱塞泵分解为容积腔、节流口与机械约束等基础单元,从而真实刻画柱塞腔压力波动、配流特性和容积效率等关键行为,摆脱黑盒模型的局限。基于机理建模的仿真结果,可用于泵参数优化、故障特征分析以及控制策略验证。进一步结合AMESim与Simulink联合仿真,可以高效开发变量泵排量控制系统,研

weixin_29159441的博客 290

android Binder安全性、Unix Socket安全性研究

风险点: Binder 的服务任何 应用都可以bindService,或者提供类似的Binder服务(第三方应用可以做成和Binder 服务相同包名)安全建议:① 、需要确保 AIDL应用优先安装/预制(不要OTA后下载);②、Binder 里 可以获取 Binder.getCallingPid(),然后通过pid获取应用包名、签名来 对调用方的来源进项验证 (高版本普通应用 未必能通过pid获取包名,系统应用除外);③、Binder接口里增加鉴权参数(需要自行设计)

键盘的起始页 1717

osgearth2.10 demo功能介绍

osgearth-2.10 demo: 说明: 1、运行环境win7 x64 旗舰版,CPU i5-6400 8核,8G内存; 2、括号内是对应demo的测试参数(.earth); 3、配置OSG_FILE_PATH; 4、参数命令行可以查看各个demo需要的输入参数; 5、前缀说明:gui界面程序、cmd控制台程序、non功能未知; 6、程序后括号里的non表示不需要通过命令行输入参数; 示例: 1、gui:osgearth_3pv(simple.earth):相机与地球的投影关系,Range表示相机

rach09的专栏 2423

波分复用-Zblock仿真

Z-BLOCK是一种用于光通信模块的光学元件,其核心结构是在玻璃块一侧贴有4个特定波长滤光片,另一侧镀有反射膜和增透膜。光信号在内部呈现Z字形反射路径,实现波长分离。文章以可见光LED为例,在ZEMAX中演示了非序列模式下的建模过程,重点介绍了滤光片和膜层的参数设置方法。需要注意的是,入射角度需根据玻璃折射率、通道高度和厚度精确计算,否则可能导致光泄漏。该建模方法同样适用于光通信中的光纤激光器系统。

Zhaxibamao的博客 1751

android源码中采用Unix Domain Socket跨进程通信

      今天看android源码Zygote进程启动流程,无意间发现使用了一种文件描述符作为跨进程通信的地址,于是仔细研究了一下:  从字面来理解是传统的Socket使用,但个人觉得不应该是,特地找资料学习了一下,下面的介绍比较详细到位。又进一步了解一下,使用的其实是UDS(Unix Domain Socket),详细的介绍如下:         linux操作系统提供了一种UNIX域协议...

liangtianmeng的专栏 3482

AOSP Android14 Launcher3——动画核心类QuickstepTransitionManager详解

是一个复杂但核心的动画管理器。它利用 Android 的远程动画机制,拦截系统默认的窗口切换,并替换为高度定制、与 Launcher UI 深度集成的平滑过渡动画。当用户从一个应用程序通过手势或按键返回到 Launcher (桌面) 时,它负责创建和运行动画,使得应用程序窗口能够平滑地过渡(通常是缩小)到 Launcher 上的对应目标(图标、小部件或屏幕中心),同时 Launcher 界面元素(工作区、背景等)恢复显示。计算动画所需的各种参数,如窗口的起始/结束位置、缩放比例、透明度、圆角、裁剪区域等。

Micheal_Yang's Blog 2672

Android Framework实战开发视频--跨进程通信之Unix Socket通信

Android Framework实战开发视频–跨进程通信之Unix Socket 1 专门用于跨进程通信的Unix Socket 上一节课我们已经对Socket的网络通信已经进行了全面的了解及实战,学会了通过ip地址来进行一种网络通信,但这种通信一般用于跨设备访问场景。而我们如果在同一个设备上,只是进程与进程之间的一种通信,那就完全没有必要使用这种网络通信方式,因为明显感觉不合适,进程间本身处于一个设备上,为啥还要通过ip网络,网卡走一圈再回来。所以针对这个问题就出现了本节课要讲的Unix Domain

learnframework的博客 1805

QT绘制饼图+柱状图+折线图

使用qt绘制,折线图,饼图,柱状图,多柱状图

梅山 3878

uniapp [安卓苹果App端] - 实现判断并开启消息通知/提示权限,监测通知权限未开启时弹框提示用户并引导用户跳转至设置界面,uniApp检查通知权限+提示是否打开+点击跳转设置(详细示例代码)

uni-app判断有无通知权限,并进行设置,设置手机通知权限,开启通知权限,uni-app解决权限问题,uniapp 拉起授权(拒绝后重新开启权限)uniApp打包的手机app如果用户没开启通知权限、引导用户开启,uni-app动态打开应用通知权限,拒绝后跳转设置页面,uniapp获取通知栏权限,苹果ios系统打开通知权限,被拒绝怎么办,uniapp安卓判断通知权限,uniapp打包的APP引导用户打开手机通知权限,uniapp权限被拒绝,跳转手机设置页面 权限设置,IOS应用内跳转系统设置,uni-app

🏆 前端领域优质创作者 1万+

Android Framework实战开发视频--跨进程通信之Socket通信

Android Framework实战开发视频–跨进程通信之Socket通信 1 Socket是什么呢? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。 2、Socket的方法介绍 既然是相互之间的通信,那就肯定有客户端和服务端,那么使用socket通信时候二者的具体流程是怎么样的?那我

learnframework的博客 1737

华为OD机试 - 进制转换 - 二进制(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题。

学Java,找哪吒 918

Unix Socket Tutorial Intro

Unix Socket Tutorial Intro目录 Unix Socket Tutorial Intro 目录 引言引言最近在研究 Unix 网络编程,免不了要学习 Socket,计划写下自己学习的笔记,权当读书心得了。在开始网络编程之前,最好对 OSI 分层比较了解,尤其是 TCP/IP 协议,推荐 图解 TCP/IP 这本书。图文并茂,通俗易懂。这个阶段弄清楚 面向连接和无连接,封包解包,

STEPHEN的专栏 325

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ndk学习16: unix domain socket

一、UNIX Domain Socket概念:UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC)特点:1. 它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等2. 只是将应用层数据从一个进程拷贝到另一个进程。工作模式:SOCK_DGRAM 类似于UDPSOCK_STREAM 类似于TCP用途:UNIX Domai...

weixin_30376509的博客 283

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android socket 发送byte_手撕Linux Socket——Socket原理与实践分析

最近一段时间一直在学习Linux网络,学习的过程中经常会碰见Socket。这个东西在我脑子里一直很模糊,大概只知道它是个文件,然后能通信,就完了。中文名字也是很奇怪,叫什么“套接字”还是“插头”,搞得我云里雾里,索性狠下心来把Socket挖个底朝天。这篇文章也是我学习Socket的总结,参考了很多网上的文章,加上自己的理解和总结。如果文中有错,希望大家指出,在此感谢!Socket是什么?Socke...

weixin_39611722的博客 162

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android Socket

总结一下遇到的几个sockaddr数据结构的用法 skb详细解析【转】 sockaddr和sockaddr_in详解 sockaddr_in , sockaddr , in_addr区别Socket编程函数集(非常有用) Netlink的简介及使用方法 Linux编程之recvmsg和sendmsg函数 TCP/IP编程之getsockopt/setsockopt函数详解 socketpair的用法和理解

greatwgb的博客 393

Android Framework实战开发-socket跨进程通信之native程序与apk java通信

csdn在线学习课程,课程咨询答疑和新课信息:QQ交流群:422901085进行课程讨论 android跨进程通信实战视频课程(加群获取优惠) unix socket前面几节课已经讲过了,但都是基于linux下面的c程序,那么在android中往往经常会遇到c代码的native程序要与 apk的java程序进行socket通信,本节课我们来实现一下: 直接上代码: native端作为服务端: #include <stdio.h> #include <stdlib.h> #includ

liaosongmao1的专栏 478

Android-Native进程间通信实例—Socket本地通信服务端进程异常退出解决办法

如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。,第一时间获取最新知识点Android架构师之路很漫长,一起共勉吧!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!

2301_77110605的博客 1047
上一篇: Android Binder startAcitivity的Binder过程
下一篇: Android Socket学习(二)java与native_socket通信
we1less
博客等级 码龄9年 230粉丝 290原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值