当前位置: 首页 > news >正文

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

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.mrgr.cn/news/83241.html

相关文章:

  • 【存储过程】Mysql的存储过程,语法及案例(详解)
  • eNSP之家----ACL实验入门实例详解(Access Control List访问控制列表)(重要重要重要的事说三遍)
  • 平面坐标转大地坐标(arcgisPro中进行)
  • 华为 Sensor 省电策略调研
  • 初学stm32 --- DMA直接存储器
  • Redis--20--大Key问题解析
  • 金山WPS Android面试题及参考答案
  • G1垃圾回收器的FullGC
  • SpringBoot3集成案例
  • 时频分析之S变换
  • 开源生成式物理引擎Genesis,可模拟世界万物
  • React中createRoot函数原理解读——Element对象与Fiber对象、FiberRootNode与HostRootNode
  • open3d+win10+vs2019环境安装配置及测试
  • YangQG 面试题汇总
  • 面向对象分析与设计Python版 分析与设计概述
  • 概率论与数理统计总复习
  • 【机器视觉】OpenCV 图像轮廓(查找/绘制轮廓、轮廓面积/周长、多边形逼近与凸包、外接矩形)
  • vue的路由守卫逻辑处理不当导致部署在nginx上无法捕捉后端异步响应消息等问题
  • Kubernetes 使用自定义资源(CRD)扩展API
  • 前后端分离的vue3项目改造成nuxt3项目
  • 通过Apache、Nginx限制直接访问public下的静态文件
  • 生物医学信号处理--随机信号的数字特征
  • C++ 中常见的预处理指令总结
  • 《机器学习》——贝叶斯算法
  • linux音视频采集技术: v4l2
  • 01-springclound