Android 设备间TCP通讯

基于 P2P 技术的 Android 局域网内设备通信实践 每种方式都有其适用范围,下面分别介绍一下它们的示例代码、优劣势。 阅读详情

TcpService

初始化ServerSocket

    class SocketAcceptThread extends Thread{
        @Override
        public void run() {
            try {
                mServerSocket = new ServerSocket(5566);
                mSocket = mServerSocket.accept();
                inputStream = mSocket.getInputStream();
                while (true){
                    byte[] buffer = new byte[1024];
                    try {
                        if (null != inputStream){
                            inputStream.read(buffer);
                            String s = new String(buffer);
                            Message messagehand = new Message();
                            messagehand.obj =s;
                            mHandler.sendMessage(messagehand);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
            } catch (Exception e) {
                e.printStackTrace();
                return;
            }
        }
    }

Handler更新UI

    @SuppressLint("HandlerLeak")
    Handler mHandler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if (null != msg && null != msg.obj){
                String s = msg.obj.toString();
                Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
            }
        }
    };

启动线程

 new SocketAcceptThread().start();

TcpClient

初始化Socket 设置Service的ip和约定好的端口号

    class SocketConnectThread extends Thread{
        public void run(){
            try {
                mSocket = new Socket("192.168.3.186",5566);
                if(mSocket != null){
                    outputStream = mSocket.getOutputStream();
                }
            } catch (Exception e) {
                e.printStackTrace();
                mHandler.sendEmptyMessage(MSG_SOCKET_CONNECTFAIL);
                return;
            }
            mHandler.sendEmptyMessage(MSG_SOCKET_CONNECT);
        }
    }

Handler更新UI

    @SuppressLint("HandlerLeak")
    Handler mHandler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
        }
    };

发送消息 所有网络操作需要在子线程中进行

    public void send(View view) {
        new Thread(() -> {
            try {
                outputStream.write(TextUtils.isEmpty(editText.getText().toString())?"默认消息".getBytes():editText.getText().toString().getBytes());
                outputStream.flush();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }

最后启动线程

 new SocketConnectThread().start();

记得管理 Socker 和 ServerSocket 的生命周期。

无需服务器:Android 应用中使用 P2P 技术进行局域网内设备通信 P2P 技术是 Android 应用中构建局域网设备通信的一种有效方式。通过使用 Wi-Fi Direct 技术,可以实现设备之间的直接通信,而无需经过服务器或者其他中介设备。要在 Android 应用程序中实现 P2P 技术,需要完成以下步骤:添加 Wi-Fi Direct 权限,初始化 Wi-Fi Direct,搜索设备,获取设备列表,建立连接和传输数据等。借助 P2P 技术, Android 应用程序可以实现更高效的局域网通信,从而增强用户体验。 阅读详情

相关推荐

Android 即时通讯

在刚开始学习Android的时候,我特别想了解类似于QQ和微信这样的聊天软件是怎么实现的,相信有很多小伙伴跟我一样很想去了解并自己实现一个聊天工具。那么下面我就来给大家介绍一下我是怎么实现即时通讯的。 首先我们要明白这篇文章是为了解决哪些问题,提出问题如下: 1. 什么是即时通讯? 2. 怎样实现即时通讯? 3. 即时通讯有什么作用?什么是即时通讯?在学习即时通讯之前,我们必须明白即时通

Traveler 1万+

【Android】串口通信的理论与使用教程

串口是显控设备与信号处理板之间通信的主要接口,也是显控设备与其他设备、设备与设备之间的协议数据帧通信传输的重要接口。本文将从Android开发者的视角带你去了解串口通信。

宾有为的博客 6979

开源一个自用的Android IM库,基于Netty+TCP+Protobuf实现。

转载请注明出处:https://juejin.im/post/5c97ae12e51d45580b681b0b 写在前面 一直想写一篇关于im即时通讯分享的文章,无奈工作太忙,很难抽出时间。今天终于从公司离职了,打算好好休息几天再重新找工作,趁时间空闲,决定静下心来写一篇文章,毕竟从前辈那里学到了很多东西。工作了五年半,这三四年来一直在做社交相关的项目,有 直播、 即时通讯、 短视频分享、 社区论...

FreddyChen的博客 6678

Android网络功能开发(6)——TCP协议通信

Android网络功能开发(6)——TCP协议通信

weixin_42602900的博客 1071

Android实现两个手机间的通讯

博客地址://blog.youkuaiyun.com/dmk877/article/details/51685656

手把手教你用ADIsimCLK和GUI搞定HMC7044时钟配置(附避坑指南)

本文详细解析了HMC7044时钟芯片的配置方法,通过ADIsimCLK和HMC7044 Configuration GUI工具,从频率规划到硬件验证全流程实战演示。特别针对PLL模式选择、分频链配置等易错环节,提供量产验证的配置模板和实测数据,帮助工程师快速掌握高性能时钟解决方案。

weixin_30755393的博客 794

Android/安卓开发之WIFI通讯(上)--搜索区域网内所有设备

我的上一篇文章写的是WIFI的基本应用。基本连上WIFI之后,设备就能联网了,直接用常规的联网方式即可访问互联网(例如okhttp、httpurlconnection等)。 但是我们写个wifi应用不可能是用来联网这么简单哈。设想一下,假如我们连接wifi,但是这个wifi没有连接互联网,我们能用他来干嘛?这就涉及到区域网的应用了。 这不需要连接互联网,只要在大家连接在同一个区域网内的wifi...

天才小汪汪 8797

强化学习之课程学习法

课程学习是一种有计划的学习方法,模拟人类学习的过程。它通过设置逐步增加难度的任务序列,让学习系统从简单的任务开始,逐渐过渡到复杂任务。这一方法可以显著提高训练效率,避免智能体一开始就面临过于复杂的任务,从而导致学习过程困难。逐步难度增加:从简单的任务开始,逐步增加任务的难度,直到智能体能够解决最复杂的任务。动态调整:根据智能体的学习进展,动态调整任务的难度,保证学习的过程始终处于一个适当的挑战性范围。

m0_64087341的博客 2694

MicroPython入坑记(四)利用MQTT实现0编程远程控制(上)(用安卓手机)

其实你被标题党骗了,0编程那是不可能的( ̄▽ ̄)" 不过也算近似零编程了哈哈 MQTT我就不详细介绍了,毕竟看到这个标题进来的一般也就有些基础知识了。简单说说: MQTT是IBM发布的一个物联网协议,怎么说呢,微信大家都知道,微信是大家互相联系用的,MQTT其实就类似一个物联网的微信,各个设备间可以通过MQTT来沟通信息。 其实设备间联系的协议有很多,比如TCP/UDP,HTTP等。MQT...

weixin_34332905的博客 385

Verilog数字钟

使用Verilog语言进行的数字钟的编写,FPGA开发板亲测正常 大学生一个,第一次自己做的东西,写出来分享在这里插入代码片一下,有不对的地方请大家批评指正。 这次的做的题是:设计一个数字钟,该数字钟能进行正常的时,分计时功能,且能对数字钟的时间进行调整。 该数字钟有3个按键,按键1为功能键,用于数字钟在“正常计时”,“时调整”,“分调整”这三个功能之间切换;按键2,3用于调整时间,仅当数字钟处于...

bin_bin_bun的博客 6149

vue 插件vue-awesome-swiper实现 三张图片,左右两边显示一半的效果的示例

希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

weixin_50450473的博客 3244

android调用js方法!分享一些行业经验,一线互联网公司面经总结

一. 开发背景 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样。 我们的项目需要开发一款智能硬件。它由 Web 后台发送指令到一款桌面端应用程序,再由桌面程序来控制不同的硬件设备实现业务上的操作。从 Web 后台到桌面端是通过一个 WebSocket 长链接来进行维护,而桌面程序到各个硬件设备也是一个 TCP 长链接来维护的。 本文讲述的,其实是从桌面程序到各个硬件之间的通讯。 这是一个做精品的时代了,不是当年出个产品就能拉投资骗点击的时代了。精品

fanzhang_vip0723的博客 158

基于 Go 的微信滑块验证码自动化:协议还原与图像算法深度解析

本文从协议层、算法层和工程优化三个维度,系统拆解了基于Go的微信滑块验证码自动化方案。在协议层,通过手写protobuf编码器和RSA加密复现了微信UUID生成机制;在算法层,采用图像匹配技术实现滑块缺口定位;在工程层面,构建了包含HTTP状态机和随机化设备指纹的完整验证流程。文章重点阐述了技术实现的形式化建模、算法选择依据和复杂度分析,为工程师和算法研究者提供了可验证的技术方案。核心代码结构包括UUID生成、滑块状态机和图像匹配算法等模块,通过分层设计实现了高效可靠的验证码自动化破解。

weixin_65409651的博客 1293

android底层开发!分享一些行业经验,一线互联网公司面经总结

一. 开发背景 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样。 我们的项目需要开发一款智能硬件。它由 Web 后台发送指令到一款桌面端应用程序,再由桌面程序来控制不同的硬件设备实现业务上的操作。从 Web 后台到桌面端是通过一个 WebSocket 长链接来进行维护,而桌面程序到各个硬件设备也是一个 TCP 长链接来维护的。 本文讲述的,其实是从桌面程序到各个硬件之间的通讯。 这是一个做精品的时代了,不是当年出个产品就能拉投资骗点击的时代了。精品

m0_52308677的博客 211

CSP-J第一道模拟题——贪心的小朋友

第一行是一个整数 n,表示糖果的堆数 第二行是由空格分隔的 n 个正整数,即数组 candies,表示每堆糖果的数量。后一个离场的小朋友所拿的糖果总堆数必须小于前一个小朋友(对第一个小朋友没有限制)后一个离场的小朋友所拿的糖果总量必须小于前一个小朋友(对第一个小朋友没有限制)这道题目很简单,但是必须删去无用的部分,看清题目,才能得分哦!输出一行共一个整数,表示最多可能有多少个小朋友吃上了美味的糖果。输出最多可能有多少个小朋友吃上了美味的糖果。离场之后的小朋友才能吃上美味的糖果。每个小朋友可以拿多堆糖果。

weixin_29959235的博客 639

uniapp(vue3)- 详解安装/使用pinia报错reportJSException >>>> exception function:createInstanceContext, excepti

uniapp vue3 pinia报错reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack -> at useStore,H5网页,微信小程序,安卓App,苹果App,nvue,uniapp安装使用pinia出现报错at useStore,uniapp+vue3+ts 使用pinia报

🏆 前端领域优质创作者 4046

Android/安卓开发之WIFI通讯(下)--与搜索到的设备进行通讯

上一篇文章是已经完成了搜索区域网内的所有设备,那么搜索出来后就是进行通讯了。 其实,这几篇文章说是wifi的应用也不准确,准确的说都是socket的应用。只要基础应用那篇是涉及wifi的。 之前说了,在发送UDP广播时,我们为了大家都能相互搜索,所以大家都有一个客户端和服务端,但是到了TCP这么做不太好,平时我们玩游戏不就是房主创建房间,其他人加入么?难道每个人都创建自己的房间,然后又可...

天才小汪汪 3673

【VxWorks】Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点

VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统,是嵌入式开发环境的关键组成部分。其内核支持多任务调度(采用基于优先级抢占方式,同时支持同优先级任务间的分时间片调度)、任务间的同步、进程间通信机制、中断处理、定时器和内存管理机制等,且提供了一个快速灵活的与 ANSIC 兼容的 I/O 系统,网络支持 对其它VxWorks系统和TCP/IP网络系统的"透明"访问。具有良好的持续发展能力、良好的可靠性、卓越的实时性和高性能的内核以及友好的用户开发环境。

smartvxworks的博客 1064

android手机版tcp或者udp通讯测试工具,可以用于工业设备或者系统开发时间测试tcp或是udp连接通讯是否正常工作

另外这个工具由于是通用的,可以收发16进制字符串或者直接是字符串(utf-8),所以在用netty时没有进行收发的编码解码,这样很大的信息会丢,这里设置了一个比较大缓冲区64k(65536)(.option(ChannelOption.RCVBUF_ALLOCATOR, AdaptiveRecvByteBufAllocator(3069, 4096, 65536))//设置tcp缓冲区),如果超过这个大小会丢,后面有空我会更新一篇用在实际的项目中如何写netty接收编码解码的来解决这个问题,

ihchenchen的博客 8396

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android中通过USB接口与和PC进行通讯的demo程序

有时候数据线也能当网线使用,本demo实现了使用USB数据线和PC进行sockect通讯的功能。

IT熊的专栏 4541

怀旧版电脑GBC模拟器

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

android tcp 多个设备,实现两台Android模拟器之间的Socket通讯

1、前言其实解决的方法在Android的SDKDocument里面已有说明,只是如果在网上找会找到很多方法,但是都没办法很好的实现(可能我悟性不够),具体的解决方法参考android-sdk/docs/guide/developing/devices/emulator.html中的说明。2、缘由最近在做一个项目,需要使两台Android设备之间通过WIFI进行Socket通讯,因此必须要有两台设备...

weixin_30540871的博客 654

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C与Android进行Tcp通讯:构建稳定高效的数据连接

C#与Android进行Tcp通讯:构建稳定高效的数据连接 去发现同类优质开源项目:https://gitcode.com/ C#与Android进行Tcp通讯,是专为需要在C#后端与Android客户端间建立稳定TCP通信的应用场景设计的解决方案。 项目介绍 在当今物联网和移动开发领域,稳定高效的数据传输至关重要。C#与Android进行Tcp通讯项目,提供了一套完整的通信解决方案。该项目由两部...

gitblog_06714的博客 720

qt for android 开发之tcp通讯

qt for android 开发之tcp通讯

路过的熊的博客 1398

android socket通信_安卓和PC端TCP通信

最近去了一趟上海,外滩的景色还是很nice的,非常喜欢这种具有历史感的建筑。很久没写文章,小姐姐最近打代码比较少,搞项管去。。。。。。程序媛才是小姐姐的最爱,记录文档写起来,哈哈哈。在一些工具类开发中,经常涉及不同设备之间的通信,今天我就针对安卓手机和PC端的通信,做一些文档说明。在安卓手机和PC端的TCP通信中,PC做为接收端(服务器Server端),以Android设备做为发送端(客户Clie...

weixin_39673742的博客 878

Android设备一对多录屏直播--(UDP组播连接,Tcp传输)

转载请注明出处:https://blog.youkuaiyun.com/sunmmer123 近期需要学习流媒体知识,做一个Android设备相互投屏Demo,因此找到了这个博主写的,看了很久也同该博主交流探索了许久,非常感谢该博主。 这位博主介绍了Android之间互相的录屏直播 –点对点传输(tcp长连接发送h264),详细介绍了h264的数据结构,对于刚学习流媒体的人来说是很好的福利,不多说...

sunmmer123的博客 1万+
上一篇: Android 保存View到图库 (这种方法避免了一次保存多张的问题)
下一篇: Unable to load class ‘javax.xml.bind.JAXBException‘
我有名有姓
博客等级 码龄10年 1粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值