Android原生开发同一局域网内利用socket通信进行数据传输

ops/2025/1/12 1:42:31/

1、数据接收端代码如下,注意:socket 接收信息需要异步运行:

// port 端口号自定义一个值,比如 8888,但需和发送端使用的端口号保持一致
ServerSocket serverSocket = new ServerSocket(port);
while (true) {//这里为了调试方便写为true,实际使用时不要写死为true,要有控制try {//连接客户端Socket clientSocket = serverSocket.accept();BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));// 接收内容String message = in.readLine();clientSocket.close();} catch (IOException e) {e.printStackTrace();}
}

2、数据发送端代码,注意:socket 发送信息需要异步运行:

try {// ip 指的是数据接收端的 ip 地址,port 端口号和前面数据发送端的端口号保持一致Socket socket = new Socket(ip, port);DataOutputStream writer = new DataOutputStream(socket.getOutputStream());// 写入 UTF8 格式的文本数据并发送,这里我把内容写死,实际操作中可以动态替换writer.writeUTF("文本数据123456");socket.close();
} catch (IOException e) {e.printStackTrace();
}

3、获取本机 ip 地址

        3.1、方式一:如果是连的局域网 Wifi,可以用以下代码获取(如果是用的流量,也有获取 ip 的方法,我这里一开始没想到有这个场景,所以也没完善出来)

// 获取当前WiFi的IP地址
public static String getLocalIpAddress(Context context) {WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);int ipAddress = wifiManager.getConnectionInfo().getIpAddress();String str = String.format("%d.%d.%d.%d",(ipAddress & 0xff),(ipAddress >> 8 & 0xff),(ipAddress >> 16 & 0xff),(ipAddress >> 24 & 0xff));if (TextUtils.isEmpty(str)) {Toast.makeText(context, "WIFI IP 地址获取失败", Toast.LENGTH_SHORT);}return str;
}

        3.2、如果不是连的局域网 Wifi 或者不想用代码获取,可以打开设备-设置-关于手机/平板-状态信息-IP 地址,如下图所示:

 4、个人自测调试用的 Demo 源码,有需要的可以打开下面资源链接免积分下载:

https://download.csdn.net/download/victor_E_N_01185/90244292?spm=1001.2014.3001.5503

5、Demo 操作及效果视频如下:要确保所连的 Wifi 是同一个,一般同一 Wifi 的 ip 地址的前两个部分是一样的,比如都是 192.168.XX.XX,最好关闭移动流量的开关,否则数据传输可能会失败,我用的是代码来获取的本机 ip 地址,如果使用的是流量,则 ip 地址会获取失败,后续操作也都会失败,大家可以改为手动输入 ip 地址或者写死 ip 地址来进行调试

局域网 Socket 数据传输 Demo


http://www.ppmy.cn/ops/149309.html

相关文章

解密Navicat密码(Java)

最近从Navicat换到了DBeaver,导出配置文件发现配置文件里的密码都是加密的,看网上的都是给的PHP代码,因为环境问题,就算是在线上运行的PHP代码也会报错,所以就把这段代码改成Java了。 package com.unicdata.system.con…

uniapp 导入uview-plus,使用组件出现,页面出现<up-parse>元素不存在,请检查你的代码

错误截图: 原因: 未按照官网方式进行配置,需要进行以下配置。具体详情 // pages.json {"easycom": {"autoscan": true,// 注意一定要放在custom里,否则无效,https://ask.dcloud.net.cn/question…

机器学习实战——决策树:从原理到应用的深度解析

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​ ​​ 决策树(Decision Tree)是一种简单而直观的分类与回归模型,在机器学习中广泛应用。它的…

go中协程的生命周期

在 Go 中,协程(goroutine)的生命周期大致可以分为以下几个阶段: 1. 创建阶段 协程的创建通常是通过 go 关键字来启动的。例如: go func() {// 协程执行的代码 }()当执行 go func() 时,Go 会在后台启动一…

前端开发 vue 中如何实现 u-form 多个form表单同时校验

在 Vue 项目中使用 UView UI 的 u-form 组件时,多个表单同时校验的需求非常常见。例如,当我们有多个表单需要在同一个页面中进行校验并提交时,我们需要确保每个表单都能进行单独验证,同时可以在同一时刻进行批量验证。 接下来&am…

关于Mysql 中 Row size too large (> 8126) 错误的解决和理解

提示:啰嗦一嘴 ,数据库的任何操作和验证前,一定要记得先备份!!!不会有错; 文章目录 问题发现一、问题导致的可能原因 1、页大小2、行格式 2.1 compact格式2.2 Redundant格式2.3 Dynamic格式2.4…

利用 Java 爬虫从 yiwugo 根据 ID 获取商品详情

在当今数字化时代,数据是商业决策的关键。对于从事国际贸易的商家来说,精准获取商品的详细信息至关重要。yiwugo 是一个知名的国际贸易平台,拥有海量的商品数据。通过 Java 爬虫技术,我们可以高效地从 yiwugo 根据商品 ID 获取详细…

Java 将RTF文档转换为Word、PDF、HTML、图片

RTF文档因其跨平台兼容性而广泛使用,但有时在不同的应用场景可能需要特定的文档格式。例如,Word文档适合编辑和协作,PDF文档适合打印和分发,HTML文档适合在线展示,图片格式则适合社交媒体分享。因此我们可能会需要将RT…