Android p2p局域网聊天软件的实现

基于Android系统的IPv6网络接入分析                                                                   基于Android系统的IPv6网络接入分析 摘 要:本文深入分析了Android设备接入IPv6网络对硬件、软件的一些要求,以及目前Android软件对IPv6网络的支持情况。指出了Android系统的DHCP客户端的一些不足之处,并提出了相应解决方案。 关键词... 阅读详情

最近做了个Android 端的局域网聊天软件。简单说一下思路:

首先由于是局域网的p2p,所以没有后台服务器。但是传文件,发信息用的是tcp,tcp前提是建立连接。我们都知道tcp建立连接时需要双方的ip地址才可以建立连接。

所以刚开始比较比较重要的一步是获取对方主机的ip地址,这里用udp局域网广播实现。

注意,手机应该是要在wifi已连接的状态下。Android 可以用一下方法获取本机的wifi ip地址:

private static String getIp() {
WifiManager wm = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
// 检查Wifi状态
if (!wm.isWifiEnabled()) {
Toast.makeText(TinyKingApp.context, "清先打开wifi。", Toast.LENGTH_SHORT)
.show();
System.exit(0);
}
// wm.setWifiEnabled(true);
WifiInfo wi = wm.getConnectionInfo();
// 获取32位整型IP地址
int ipAdd = wi.getIpAddress();
// 把整型地址转换成“*.*.*.*”地址
String ip = intToIp(ipAdd);
return ip;
}

获取到本机的ip地址之后,比如是192.168.23.10,那么用于广播的目的地址就是192.168.23.255。经测试 192.168.23.0(代表一个网段)也是可以进行广播的。

接下来只需要构造udp数据报发送出去即可,核心代码如下:

// 构造数据报包
DatagramPacket packet = new DatagramPacket(MyMsg.getBytes(),
MyMsg.getBytes().length, InetAddress.getByName(TinyKingApp
.getInstance().getSPUtil().getUDPAddress()), 3333);
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
socket.close();

注:MyMsg是一个String类型的变量,及时你要发送给对方的信息,这里不仅仅发送ip,还发送昵称等信息。

udp接收的核心代码如下:

// 构造 DatagramPacket,用来接收长度为 length 的数据包
DatagramPacket packet = new DatagramPacket(inbuf,
inbuf.length);
synchronized (socket) {
try {
// 从此套接字接收数据报包

socket.receive(packet);
} catch (Exception e) {
e.printStackTrace();
break;
}
}
String s = new String(packet.getData(), "UTF-8");

注:inbuf 是一个自定义的缓冲区,这个缓冲区应该要比接受的信息的容量大,我这里用的是100个字节的缓冲区。

        还有要注意的一点,拿到对方ip后,按照常理应该发送自己的ip给对方,这样对方才能更新他的好友列表。所以我们需要判断收到的udp广播是否是自己发的,是否是重复           收到的等因素。若不判断会造成双方一致不停地对发的死循环。

拿到双方的ip之后一切都好办了。对于tcp的连接本省来说,有一个服务端(ServerSocket)跟一个客户端(Socket)。我这里默认当主机要接收信息的时候作为服务端,发送的时候作为客户端。

由上,当我们打开应用的时候,应该开启一个tcp的服务端线程,用于不断接收来自他人的信息(文字,文件。。)

核心代码如下:

            while (StopFalg) {
try {
// 获取客户端连接,并返回一个新的socket对象
Socket socket = serverSocket.accept();
// 创建clientThread并启动
// 启动ClientsThread之后,可以监听改连接对应的客户端是否发送过来信息
// 并获取信息
TCPClientThread tCPClientThread = new TCPClientThread(handler,socket);
tCPClientThread.start();
if (socket != null) {
synchronized (clients) {
// 将客户端连接加入到vector数组中保存
clients.addElement(tCPClientThread);
}
}
} catch (IOException e) {
// TODO: handle exception
continue;
}
}

注:ServerSocket 的 accept方法是一个阻塞方法,就是改方法有一个内循环。如果该方法没有返回一个Socket 的实例,那么语句会一直停在这个方法。

        由于主机可能同时和多个主机进行通信,所以直接在循环中处理即受到的信息不妥当。可以用一个线程维持当前的连接(将实例化好的socket传入即可)。

tcp发送文字信息核心代码如下:

      socket = new Socket(ServerIP, 3333);
out = new DataOutputStream(socket.getOutputStream());


out.writeUTF(TinyKingApp.getInstance().getGson()
.toJson(message, Message.class));


out.close();
socket.close();

其中 ServerIP 是服务端的ip,即接收方的ip。当发送方 执行socket = new Socket(ServerIP, 3333);的同时,服务端ServerSocket 的accept 方法会跳出循环,返回一个Socket实例。

接收方接收文字信息的核心代码如下:

//创建服务器输入/输出流
in = new DataInputStream(clientSocket.getInputStream());

//读入客户端发送过来的信息
String message = in.readUTF();
// synchronized (tCPServerThread.messages) {

if(message != null){
Message msg = new Message();
msg.what = Constants.NEWMSG;
msg.obj = message;
handler.sendMessage(msg);
TCPServerThread.clients.remove(this);

finalize();
break;
}

从ServerSocket返回的Socket实例—clientSocket中取得输入流,监听输入流进行判断即可。

tcp传送文件的方法也跟文字信息大同小异,不再赘述。

贴上源代码:http://pan.baidu.com/s/1c0IeDVi

技术因分享而强大!

java实现P2P通信(含安卓实现的基于IPV6的p2p通信代码) java实现P2P通信(含安卓实现的基于IPV6的p2p通信代码)什么是P2P网络用udp打洞的三种方式IPV6实现P2P通信 什么是P2P网络 p2p网络又叫对等网络,顾名思义就是在该网络中所有节点都是平等的,都可以共享自己的硬件资源和数据资源。每个节点都能被其它对等节点直接访问而无需经过中间实体。换句话来说,目前绝大多数应用都是基于C/S或者B/S架构的,就拿微信来说,当A要通过微信给B发一条消息时,消息首先会从A发送到服务器,然后服务器在转发给B。这样服务器就会知道AB之间的聊天记录。而P2P网络来说 阅读详情

相关推荐

FastSend:全平台免费不限速的局域网传输方案详解

局域网传输是指在同一网络内设备间直接交换数据,相比云端中转具有更快的速度和更高的隐私性。传统方案如共享文件夹、网盘或聊天软件,往往存在跨平台配置复杂、依赖公网、限速或压缩画质等问题。基于P2P直连架构的文件传输工具,让数据在设备间直接流动,不经过第三方服务器,因此既没有限速者,也无需支付带宽成本,真正实现全平台免费不限速。这类工具在日常办公快速搬运资料、视频剪辑倒素材、工作室多人协作等场景中极具价值。FastSend正是这样一套方案,支持Windows、macOS、Linux、Android与iOS,通过浏

weixin_32576389的博客 191

Android P2P语音通话实现(思路探讨)

  最近在在研究语音通话的实现,现在把我的实现思路记录在这里。不过,由于初次接触语音通话,所以这是一个简单的思路,也是经过google以及baidu之后的一个学习总结。   我认为一个语音通话系统至少有四个模块。分别是PCM(Pulse Code Modulation,即 脉码编码调制)语音采集,编解码,网络传输以及语音播放。如果算上UI交互的话,就是五个模块了。   整体流程大概是:A打电话...

weixin_30679823的博客 597

安卓与iPad跨平台文件传输全攻略:LocalSend、SMB与HTTP方案详解

跨平台文件传输是移动办公与多设备协作中的高频需求,其核心在于选择匹配网络拓扑的传输协议。局域网内,基于P2P的LocalSend利用HTTPS直连实现设备互传,SMB协议则通过共享目录提供持久化挂载能力,而HTTP网页服务以零客户端优势解决临时分享场景。理解不同协议的应用边界与批量传输、断点续传等技术特性,有助于在不同场景下做出高效选型。文章从安卓与iPad的实际互通出发,系统梳理了无线传输、文件共享、局域网服务等主流方案,并提供了排查设备发现失败、传输中断等常见问题的工程实践思路。

weixin_29698641的博客 334

android无线局域网通信,基于Android的无线局域网实时语音通信系统设计与实现

摘要:随着移动互联网的深入发展和广泛普及,利用网络进行通信成为了人们的通信和交流方式新趋势.使用WiFi语音进行通话是对传统电信服务模式的颠覆,也是对已有网络资源的深度开发.然而现在的Android移动应用市场上,WiFi语音应用存在着功能复杂冗余,占用手机内存大,收费等诸多限制.本文旨在探索和设计实现一个WiFi语音通信系统,为用户提供免费而稳定的语音通信服务.本文描述的项目是一个基于Andro...

weixin_34980267的博客 916

安卓与iPhone互传文件最全方案:从换机迁移到日常传输

跨平台文件传输是手机用户的高频需求,尤其当安卓与iPhone并存时,很多人会陷入微信传文件慢、蓝牙不兼容、数据迁移无从下手的困境。理解传输原理是解决问题的第一步:数据分为媒体文件、文档和系统级数据,不同类别需要匹配不同的传输通道。局域网P2P技术如LocalSend通过点对点直连实现高速无损传输,不经过第三方服务器,兼顾安全与效率;苹果官方“转移到iOS”工具则专为一次性换机设计,能迁移通讯录、照片等核心数据。在办公或备份场景中,网盘中转与自建SMB/FTP服务则更适合大文件与批量整理。掌握这些技术方案后,

weixin_33581873的博客 291

局域网文件共享神器:MeFile大文件传输与密码保护实战指南

局域网文件共享是日常办公与组网维护中的基础需求,但面对动辄几十GB的大文件传输,传统即时通讯和网盘常因中转限速而力不从心。局域网环境下,P2P直连技术让数据不绕路,能够充分利用千兆网卡带宽,实现百兆每秒级的实际传输速度。同时,密码保护的引入解决了共享目录的访问控制问题,双向互传模式则顺应了同一设备的收发需求,让文件交换从繁琐的技术操作变成简单三步。此类工具尤其适合公司运维、工作室网管以及需要频繁交换大文件的团队,可有效替代FTP和Windows共享文件夹的复杂配置。本文以MeFile为例,整理了一条从下载配

weixin_30536861的博客 440

基于Android的IM即时通讯聊天P2P应用设计与实现(源码)

安卓Android IM即时通讯聊天、基于P2P的局域网即时通信应用

swEngineer16的博客 579

告别SMB共享烦恼:基于P2P直连的零配置远程文件互传方案

文件传输是计算机数据交换的基础需求,其核心在于如何在网络节点间高效、安全地移动数据。传统方案如SMB协议依赖复杂的网络配置和系统共享设置,尤其在跨网络、跨设备场景下,面临NAT穿透、防火墙规则和公网暴露等挑战。现代P2P(点对点)技术通过应用层直接建立加密通信通道,绕开了底层网络复杂性,实现了零配置的直连传输,其技术价值在于兼顾了易用性、传输效率与安全性。这种方案特别适用于需要频繁进行大文件交换的远程协作、跨平台设备互传以及家庭与办公环境间的数据同步等场景。本文以实际工具为例,深入解析了如何利用P2P直连与

weixin_33858336的博客 552

安卓手机传电脑文件全攻略:从USB线到局域网与云盘

文件传输是日常办公与生活中最高频的操作之一,但从安卓设备向电脑转移数据时,很多人会在速度、稳定性和便利性之间反复纠结。要解决这个问题,先要理解不同传输协议的本质差异:USB数据线依赖MTP协议实现物理通道的稳定读写,适合大文件和敏感数据;无线方案则借助Wi-Fi直连或SMB共享构建局域网快传通道,兼顾速度与免线缆的便利;而跨地域场景下,云存储与P2P中转成为不可替代的保底方案。掌握这些技术原理后,你能根据文件大小、传输频率和同步需求,灵活选择最合适的工具组合,彻底告别蓝牙龟速和聊天软件压缩画质的困扰。本文从

weixin_29164497的博客 292

iPhone与Windows互传文件全攻略:局域网、数据线、云盘方案对比

跨设备文件传输是日常办公和生活中的高频需求,尤其是iPhone与Windows电脑之间,由于系统生态差异,无法像苹果设备间那样通过隔空投送一键完成。理解传输的本质——无论是通过Wi-Fi直连的局域网协议、物理数据线的存储设备访问,还是依赖云服务器中转,都能帮助我们按需选择最佳方案。局域网互传工具如LocalSend利用P2P技术实现高速传输,适合同网络下的大文件;数据线直连稳定可靠,适合批量照片和完整备份;云盘与聊天工具则打破距离限制,适合远程协作。本文从技术原理出发,结合实际场景和常见问题,系统梳理了苹果

weixin_30846347的博客 308

Android聊天软件核心实现:C/S架构、Socket与多线程原理拆解

在移动应用开发中,即时通讯是典型的高频需求,而理解客户端与服务器之间的通信模型是构建此类应用的基础。C/S架构通过集中式服务器统一管理在线状态与消息路由,特别适合中小规模的教学项目和工程实践。Android平台利用Socket建立TCP/IP连接,配合Java服务端完成数据交互;MVC模式则清晰划分UI与业务逻辑,多线程机制确保网络操作不阻塞界面。这些核心技术形成一个完整闭环:从登录验证、消息转发到退出清理,体现了一条消息从发送到送达的完整链路。本文以一个可运行的Android聊天项目为对象,拆解登录、注册

weixin_29164497的博客 256

闪电藤:极速跨平台文件传输神器

《闪电藤:跨平台文件传输利器》 闪电藤是一款高效免费的跨平台文件传输工具,支持安卓、iOS、Windows、MacOS及Linux系统间无损互传。其核心优势在于仅需同一局域网即可实现100M/s极速传输,突破文件大小限制(支持1000G大文件),且完全离线操作。采用P2P技术与端到端加密确保安全,创新融合聊天式交互界面,支持批量传输、断点续传等功能。软件无广告、免登录,兼顾高效性与隐私保护,彻底解决多设备文件共享难题。

u014771868的博客 1085

Android应用源码安卓局域网语音聊天项目

本项目源码是一套关于局域网聊天的安卓项目源码。实现了语音对讲、文字对讲和文件发送功能。但是小编周围没有什么可用的无线网就没有搭建环境真正的去实验一下。模拟器还是自己玩自己的,不在一个局域网。也没法子测试。不过我看了一下源码里的工具类很丰富,其他详细的情况可以看一下截图或者自己翻一下源码 涉及模块&技术 文件发送 语音发送 录音 音频播放 ...

iPhone大型音频文件跨设备传输方案:AirDrop、LocalSend与网盘实战指南

跨设备文件传输是移动办公与内容创作中的高频需求,尤其在处理大体积音频素材时,传统聊天软件和邮件往往因压缩或大小限制而失效。理解底层原理是关键:P2P直连、局域网共享与云端中转三种技术路线分别对应不同的传输效率与适用边界。AirDrop利用蓝牙+Wi-Fi实现苹果生态内的高速直传,LocalSend基于局域网P2P打通多平台壁垒,而网盘中转则解决了跨地域传输的难题。实际工程实践中,速度、完整性与隐私是衡量方案优劣的核心指标,用户需根据设备环境与文件规模灵活选型。本文从基础概念切入,系统对比各类传输工具的优缺点

weixin_29913663的博客 363

Unity详细介绍说明限制Unity帧率的方式

在Unity开发中,帧率(FPS,Frames per Second)是一个非常重要的表现标准,它直接影响了游戏运行的流畅度。在某些应用场景里,我们可能需要手动限制帧率。限制帧率可以减少电脑的CPU和GPU负载,使运行更加稳定,同时对于移动设备来说还能有效降低电量消耗。下面就详细介绍几种限制Unity中帧率的方式。

zjw1349547081的专栏 5437

RANSAC地面点分割:从原理到C++实战优化

本文深入解析RANSAC算法在点云地面分割中的原理与C++实战优化,涵盖动态迭代次数、自适应阈值等关键技巧,通过并行计算和内存访问优化提升性能,适用于激光雷达点云处理。

weixin_29015051的博客 278

iphone文件连接smb服务器,实用!三种iPhone与Windows电脑互传文件操作技巧,建议收藏...

如果你是苹果全家桶用户,一定会对 「AirDrop(隔空投送)」 功能赞誉有加,使用 AirDrop 可以在 iPhone 与 MacBook、iPad 等设备之间快速传递照片、视频或文件。遗憾的是,「AirDrop 仅限苹果设备之间使用」,而很多小伙伴应该和小兽一样,更习惯用 Windows 系统的电脑,没有了 AirDrop,我们可以用什么工具来快速传送文件呢?估计很多人日常是通过微信、QQ ...

weixin_32821043的博客 2万+

立创EDA开源足轮机器人:基于STM32F407与ESP32的LQR自平衡与FOC驱动设计全解析

本文详细解析了基于立创EDA平台的开源足轮机器人项目。该项目采用STM32F407作为主控,ESP32负责无线通信,并应用LQR自平衡算法与FOC驱动技术,实现了机器人的稳定站立、移动转向及复杂地形适应能力。文章深入剖析了其硬件架构、软件设计及调试经验,为机器人运动控制学习提供了宝贵参考。

weixin_42608299的博客 232

如何在Android设备上搭建私有文件同步网络:Syncthing Android完整使用指南

Syncthing Android是一款强大的开源文件同步工具,它能在多台Android设备之间建立点对点文件同步网络,无需依赖任何云存储服务。这个终极指南将带你从零开始,掌握如何在手机和平板上搭建自己的私有同步系统,实现文件在不同设备间的安全传输和备份。 你是否曾为在不同设备间传输文件而烦恼?通过数据线连接、使用第三方云盘、或者通过聊天软件发送,这些方法要么繁琐,要么存在隐私风险。Syncth

gitblog_00662的博客 240

SNAP实战:哨兵1 SLC数据预处理全流程详解(附避坑指南)

本文详细解析了使用SNAP软件处理哨兵1号SLC数据的完整预处理流程。从轨道精校正、辐射定标到多视与斑点滤波,再到地理编码,文章提供了清晰的操作步骤与核心逻辑,并重点分享了实践中的常见“坑”与解决方案,旨在帮助用户高效、准确地完成SAR数据预处理。

7up55的博客 1027

智能车竞赛模糊PID代码与使用方法

本文给出了模糊PID的代码,以及模糊PID的程序使用方法、参数调整方法

piginthesouth的博客 9123

EteDrop 正式开源:一个基于 Flutter、NestJS 和 WebRTC 的跨平台文件传输项目

EteDrop是一款跨平台文件传输工具,包含Flutter客户端、NestJS信令服务和React分享页。它优先使用局域网和WebRTC/P2P直接传输,服务端仅协调设备连接。支持Android、iOS、macOS、Windows和Linux平台,提供文件预览功能,接收方可通过浏览器直接下载文件。项目采用monorepo管理,包含客户端、服务端、分享页和官网。已开源并完善文档,适合对Flutter、WebRTC和NestJS开发感兴趣的开发者。后续将优化传输稳定性、大文件处理和跨平台体验。 GitHub:

xiaovvbai的博客 422

CentOS7下快速修复libssl.so.1.1缺失问题(附腾讯云镜像加速下载)

本文详细介绍了在CentOS7系统中快速修复libssl.so.1.1缺失问题的工程化实践方案。通过编译安装OpenSSL 1.1.x版本、配置动态链接器及创建符号链接等步骤,有效解决共享对象文件缺失问题,并提供了腾讯云镜像加速下载的优化方案,帮助开发者高效部署现代应用。

weixin_33711647的博客 369

开源免费局域网互传工具LocalSend:大文件秒传实战指南

在日常工作与生活中,大文件传输往往受限于云盘速度、聊天软件大小限制或繁琐的共享设置。局域网互传技术通过点对点直连,绕开公网中转,让数据在本地网络内以接近硬件上限的速度流转。其核心原理是利用设备间直接通信,不依赖云服务器,既保障了传输效率,也显著降低了隐私泄露风险。面向办公协同、手机备份、内网运维及跨平台临时共享等场景,一款开源免费且支持多平台互传的工具尤为重要。LocalSend正是此类实践的代表,它免登录、无广告、全平台覆盖,通过HTTPS协议实现安全直传,让大文件秒传成为日常体验,也为高频文件流转提供了

weixin_34026276的博客 417

小蔺的米哈游数据分析师之路——MYSQL篇

作为新人,记录自己mysql学习历程

weixin_47070228的博客 435

LDO 上电过冲的根因

LDO在上电瞬间常出现短时过冲电压(3.4V-3.5V),可能损坏敏感器件。其根本原因是:低

硬核科技 294
上一篇: Android中自定义PopupWindow,动态弹窗。
下一篇: java 模拟登陆百度,附带“专业抢二楼”功能。
esuvf
博客等级 码龄14年 5粉丝 4原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值