Android Socket Transference R&D

基于STM32的INA226电压电流检测仪 该功率检测装置以STM32F103C8T6微控制器为核心,集成功率检测、数据交互、状态显示和用户提示功能,通过模块化设计实现稳定运行。系统包括按键、LED指示灯、OLED屏幕、INA226电压电流检测、复位电路、晶振电路、蜂鸣器驱动、输入输出接口、调试接口和3.3V降压电路等模块。微控制器通过按键检测用户输入,启动功率检测,采集数据并通过OLED显示,异常情况触发蜂鸣器报警,LED状态指示同步反馈。3.3V降压电路为所有模块提供稳定电源,晶振电路确保时序精度。INA226芯片通过I2C接口与微控制器通信,实 阅读详情

Android To PC

Client-Android:

其实懂得了PC to PC, 到了Android,只要知道要进行重定向,就OK了。

P.S. 

在Android下, "127.0.0.1”或者”local” 代表Android Device, (默认定义,无法修改)

“10.0.2.2”在Android里指的是 pc 端。

127.0.0.1”或者”local” 在pc,也指pc本地。

好现在我们看看怎么重定向?

(一)PC ---Server  Android---Client

PC ---Server:   

final int SERVER_PORT = 12345;

// mapping PC port 12555 with Simulator port 12345.

Runtime.getRuntime().exec("adb forward tcp:12555 tcp:12345");

//

ServerSocket serverSocket = new ServerSocket(12345);

Android –Client:

Host: 10.0.2.2(PC端)   port:12345

(二) PC---Client   Android---Server

PC --- Client:

// mapping PC port 12581 with Simulator port 6666.

Runtime.getRuntime().exec("adb forward tcp:12581 tcp:6666");

serverAddr = InetAddress.getByName("127.0.0.1");

socket = new Socket(serverAddr, 12581);// 此处的12581是PC开放的端口,已重定向到Device的6666端口

Android --- Server:

Port: 6666

代码如下:

Client-Android:

package hf.socket.client;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.Socket;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.Dialog;

import android.content.DialogInterface;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

public class ActivityMain extends Activity {

private TextView txtRecord;

private EditText input;

private String host = "10.0.2.2";

private int port = 5556;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

input = (EditText) findViewById(R.id.input);

txtRecord = (TextView) findViewById(R.id.txtRecord);

findViewById(R.id.btnSubmit).setOnClickListener(

new View.OnClickListener() {

@Override

public void onClick(View v) {

txtRecord.append("\n" + "client:"

+ input.getText().toString());

socketTo(input.getText().toString());

}

});

findViewById(R.id.btnSetHost).setOnClickListener(

new View.OnClickListener() {

@Override

public void onClick(View v) {

showDialog(0);

}

});

setTitle("Socket to " + host + ":" + port);

}

@Override

protected Dialog onCreateDialog(int id) {

final View v = View.inflate(this, R.layout.set, null);

final EditText inputHost = (EditText) v.findViewById(R.id.inputHost);

final EditText inputPort = (EditText) v.findViewById(R.id.inputPort);

return new AlertDialog.Builder(this)

.setTitle("Config ServerHost")

.setView(v)

.setPositiveButton("Set",

new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface arg0, int arg1) {

host = inputHost.getText().toString();

port = Integer.parseInt(inputPort.getText()

.toString());

setTitle("Socket to " + host + ":" + port);

}

}).create();

}

private final void socketTo(final String msg) {

Socket socket = null;

try {

socket = new Socket(host, port);

Log.d("", "socker connect");

// send msg

PrintWriter out = new PrintWriter(new BufferedWriter(

new OutputStreamWriter(socket.getOutputStream())), true);

out.println(msg);

// receive response

BufferedReader br = new BufferedReader(new InputStreamReader(

socket.getInputStream()));

String response = br.readLine();

if (response != null) {

txtRecord.append("\n" + "server:" + response);

} else {

txtRecord.append("\n" + "no response from server");

txtRecord.append("\n" + "--------close--------");

}

// close connection

out.close();

br.close();

socket.close();

} catch (Exception e) {

Log.e("", e.getMessage());

}

}

}

PC  --- Server:

package socketServer;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class TestIIServer implements Runnable {

private ServerSocket server;

private Socket client;

public static void main(String[] args) {

new Thread(new TestIIServer()).start();

}

@Override

public void run() {

try {

// mapping PC port 12555 with Simulator port 12345.

Runtime.getRuntime().exec("adb forward tcp:12555 tcp:12345");

//

System.out.println("s: connecting...");

ServerSocket serverSocket = new ServerSocket(12345);

while (true) {

Socket client = serverSocket.accept();

System.out.println("s: receiving...");

try {

BufferedReader in = new BufferedReader(

new InputStreamReader(client.getInputStream()));

String str = in.readLine();

System.out.println("s: received:'" + str + "'");

PrintWriter out = new PrintWriter(new BufferedWriter(

new OutputStreamWriter(client.getOutputStream())), true);

out.println("s: received:'" + str + "'");

} catch (Exception e) {

System.out.println("s: error");

e.printStackTrace();

} finally {

client.close();

System.out.println("s:done");

}

}

} catch (Exception e) {

System.out.println("s:error");

e.printStackTrace();

}

}

}

激光雷达与相机外参标定(附open3d python代码) 现在的激光雷达与相机的标定程序基本都是Ubuntu框架下面的,并且都是C++代码,需要安装的依赖也比较复杂,于是自己写了一个python版本的标定程序,依赖非常简单,Windows系统也可以运行。我这里用的大疆的雷达,点比较密集,更容易用我这种方法标定,旋转的16,32线的雷达也可以用这种方法标定,只是标定点会相对难选取一些。2 手动在点云上选取N个标定点(每个点都对应图像上的点,顺序也要一致)3 通过PNP方法计算出二者的旋转投影矩阵,也就是外参矩阵。1 手动在图像上面选取N个标定点。 阅读详情

相关推荐

基于DSP28335的Matlab/Simulink代码生成实验七:A/D采样

实验七:讲解如何使用DSP的ADC模块,通过代码生成技术控制DSP进行电流采样,是后续实现电机闭环控制的重要环节。通过简单的实验来熟悉代码生成的过程。最终实现复杂算法代码自动生成,进行高性能电机控制!

m0_73869369的博客 4726

Android socket 通信

Android socket 通信 安卓编写Socket客户端,实现连接Socket服务端通信。 创建Socket连接并获取服务端数据 先创建几个全局变量吧 private BufferedWriter writer = null; Socket socket; 创建Socket // 填好IPV4的IP地址和端口,服务端会提供,问服务端要 ...

“跟他人学,和自己比” 655

近4000张真实城市场景行人数据集:YOLO训练实战指南

行人检测是计算机视觉在智能驾驶与机器人感知中的基础任务,其核心挑战在于模型对真实道路场景的鲁棒性——尤其在小目标、遮挡、光照变化及中国特有交通参与者(如外卖骑手、接娃家长)下的泛化能力。本文围绕轻量化、高覆盖、强落地性的近4000张实采图像,系统阐释如何构建面向YOLO系列模型的高质量训练数据集:从四维场景采样策略(光照-遮挡-尺度-姿态)出发,解析标注规范对检测精度的关键影响,并说明数据增强需服务于真实干扰源(雨痕、动态模糊、对比度衰减),而非盲目堆叠。该数据集专为已掌握YOLO训练流程的算法工程师、嵌入

weixin_32495691的博客 298

Android Visualizer 实战:把声音画出来

是系统提供的音频效果(AudioEffect)之一。它挂在音频链路上,,把数据回吐给你——画波形、画频谱、做响度表。

Android的专栏 312

Hyper-V虚拟机 安装 银河麒麟V10桌面版

如何在windows 11 Hyper-V 虚拟机中 安装 银河麒麟V10桌面版。

m0_46756112的博客 3425

SCI、中科院1区算法应用:(BWO-CNN-BiGRU-Attention)白鲸优化深度学习-融合注意力机制预测程序代码!包含特征可视化,数据Excel导入,直接运行!

BWO 白鲸优化算法,于2022年发表在SCI、中科院1区期刊《Knowledge-Based Systems》上。我们利用该高创新算法对我们的CNN-BiGRU-Attention时序和空间特征结合-融合注意力机制的回归预测程序代码中的超参数进行优化。

weixin_48747334的博客 3265

Android 开发入门实践(十三):用 Intent、UiState 和 Reducer 理解 MVI 的状态更新

本文记录第141—145课对MVI架构的入门实践,通过“返回列表”功能逐步构建意图(NewsIntent)、状态(NewsUiState)与状态转换(reduce)机制。基于单向数据流,用户操作生成意图,ViewModel通过Reducer根据旧状态计算新状态,并通过StateFlow更新Compose界面。代码实现清晰分离关注点,强化了对状态管理、事件驱动与数据流的理解。

Easyhood的博客 342

Fortran环境配置:VS2022+Intel oneAPI安装全流程指南

Fortran环境配置:VS2022+Intel oneAPI安装全流程指南

shuyisuisuinian的博客 2万+

RK-RK3572-Android16- 编译打包优化-OTA整包-差分包打包

这里主要记录一下 RK3572 在Android16 上面进行OTA升级的整包和差分包制作经验的一个分享,整理知识点,方便后续自己和其它同事开发提高工作效率、直接使用。不管哪一个平台,MTK 也好、RK也好 基本上都是不同Android版本各个子系统之间还是有一点点区别的,所以有必要记录整理知识点,方便提高开发效率、生产效率。针对OTA升级问题 ,再一次说明还是要看官方提供的文档,按照文档来。

十年饮冰,难凉热血 201

手把手教你玩转服务器芯片架构​专栏--​​3.5 实战案例:用SystemC搭建一个多核服务器芯片的NoC模型(含流量分配与延迟仿真)​

通过SystemC搭建多核NoC模型,可深入验证流量分配策略与延迟特性。实际工程中需结合FPGA原型验证(如Xilinx Alveo)进行时序收敛分析,并通过参数化设计适配不同服务器芯片需求。

MHD0815的博客 3048

【碳排放数据集】全球近实时网格化二氧化碳排放数据集GRACED

【碳排放数据集】全球近实时网格化二氧化碳排放数据集GRACED

WW、forever的博客 146

Android Message源码阅读

本文梳理了Android Handler机制中Message的核心设计:链表结构、消息复用池(sPool)及回收机制,重点解析了异步消息与同步屏障(SyncBarrier)的协同机制。当主线程需优先处理UI绘制等高优先级任务时,系统通过postSyncBarrier插入屏障,使Looper跳过普通同步消息,优先执行标记为异步的UI渲染任务,确保帧率流畅。该机制是保障Android界面响应性的关键技术之一。

u012116089的博客 213

知识图谱实战应用8-从文本关系抽取到知识图谱关系构建流程贯通

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用8-从文本关系抽取到知识图谱关系构建流程贯通。我们从文本数据中采集到关键信息,并抽取出其中的关系信息,然后在存入图数据库中,整个过程实现自动化,我这里将举一个文本例子进行抽取。 对于知识图谱的构建是将实体、概念和它们之间的关系都以图表形式呈现出来的一种数据结构。要构建一个知识图谱,需要从不同的数据源中采集到相关信息,并将这些信息整合在一起,最终形成一个全面而且精确的知识图谱。

微学AI的博客 2545

安卓APK下载后安装全流程:从点击下载到第一次启动,每一步的检查点

这套流程听起来繁琐,但真正需要每次都做的只有来源核对和签名校验两步,其他都是出问题时才查。养成习惯之后,能挡掉绝大多数"装了垃圾包""装完闪退"的情况。如果要省事,直接用这类会标注包名、版本号和校验信息的站点,比在搜索结果里挨个试要稳得多。

qq362196705的专栏 168

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android Laya 与 Native Bridge:页面识别、双向通信、协议设计和崩溃定位

Laya 与 Native 通信的难点不在于某个或的写法,而在于边界:页面来源是否可信、协议是否明确、线程是否正确、请求是否幂等、页面是否仍然存在、日志是否能关联一次完整请求。建立这些边界后,才能把“页面白屏”“按钮无响应”“重复消息”和“Native 崩溃”拆成可验证的层次,并沿着真实调用链找到根因。

路在脚下,幸福在手中,莫贪!!!!! 166

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

BUUCTF-菜刀流量-MISC-学习笔记

从 1970-01-01 00:00:00 UTC 起算的秒数,——Wireshark 直接告诉你它回答的是谁;由表可知道,96帧返回了flag.rar。, 代表删除键,先删了4次,又删了1次。所以密码是:SuperMaster。解析128帧的响应,即133帧。所以这是一个标准抓包文件,用。解压压缩包拿到html代码。:选中 128 帧,展开。:128 和 131 的。能把一问一答放在一起看;是八进制(Oct)的数字。(或 TCP 层)看到。对比一下ASCii 码表。

晓梦林的博客 80

Android 音频 Player 体系

Android 音频框架中,"Player"是统一抽象的音频播放实例,涵盖 AudioTrack、MediaPlayer 等。每个 Player 由唯一 piid 标识,通过 PlayerBase 注册至 PlaybackActivityMonitor,状态机管理其生命周期(idle→started→stopped→released)。关键事件如 portId 绑定、静音(位掩码标识主静音、音量为0等)、设备切换等均通过 PLAYER_UPDATE_* 通知系统。静音原因以掩码形式记录,日志中“source

aningxiaoxixi的博客 141

Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解

DSH 官方没出安卓版,火的全是社区第三方移植。本文拆解真实卡点(glibc vs Bionic)、两种「App 内 Linux」的实现(PRoot 与 seccomp 容器),以及「真沙箱」的三层边界与衡量标准。

AI_Gump的博客 353

字段获取代码(Android) · Android Input Examples

服务对象可由实际owner缓存,但不因此缓存它返回的号码、运营商或信号。信号与电话网络接口各有权限和设备能力条件,不支持的设备可抛出 UnsupportedOperationException,服务对象非 null 不代表所有电话能力均可用。语言文本还有独立的条件缓存,非null命中时不重读资源或校验格式,地区没有这份文本缓存。slotIndex是逻辑卡槽编号,不能直接传订阅ID,也不替代请求的默认卡读取。是示例自定义的偏好文件名,键名由调用方定义,不是 WhatsApp 的存储文件名或通用字段读取接口。

小乖写代码 179

Android 开发入门实践(九):把新闻数据与页面状态交给 ViewModel

本文记录第110—117课学习成果:将页面标题、新闻列表及选中编号逐步迁移至NewsViewModel,通过ViewModelProvider获取实例并读取数据。页面调用ViewModel方法处理选择与返回,实现状态管理解耦。过程中纠正了对Activity重建机制的误解,并厘清mutableStateOf的可观察性与ViewModel对象生命周期的区别,深化了对Compose状态更新机制的理解。

Easyhood的博客 226

谷歌相机9.2下载(GCam 安卓通用版 安装与使用说明)

谷歌相机9.2版移植自Pixel原生相机,支持Camera2 API的Android 10+设备安装,凭借多帧合成技术在夜景、HDR+与人像模式表现优异。可提升暗光画质、优化动态范围与背景虚化效果,支持视频防抖及配置文件自定义。安装需确认机型兼容性,建议备份原相机,避免冲突。资源可通过kuake链接获取,仅限学习测试使用。

2611_96675819的博客 218

Android 开发入门实践(十):用 Kotlin 协程完成模拟加载、取消与异常处理

本文记录第118—125课对NewsApp的协程改造:从viewModelScope.launch启动协程,逐步加入delay模拟等待、suspend函数封装、withContext(Dispatchers.IO)切换线程并观察上下文恢复机制。通过日志验证withContext完成后恢复原执行上下文(非自动回主线程),纠正了初始理解偏差。引入Job管理任务,实现加载取消与重复点击防护,结合异常处理与状态管理,完成可观察、可中断的异步流程。

Easyhood的博客 412

工业智能体:从Codex/Claude到项目实战~系列文章11:Codex 批量重构老系统:激活历史 DCS/PLC 存量代码

本期提出规模化重构工业老系统(如DCS/PLC代码)的可执行方法论:通过AST静态分析量化风险,按“盘点评估→样板重构→批量迁移→回归灰度”四阶段推进;利用Codex实现模块级批量重构,并以“金标准样本”确保数值一致性;接入CI流水线实现自动化守护。强调“小步改、保语义、可回滚”,结合绞杀者模式渐进替代,实现存量代码的安全激活。来自华北理工大学段一凡的博客文章

段一凡的博客 399

Android 开发入门实践(十六):网络新闻请求、Coil 图片加载与失败重试

本文通过接入JSONPlaceholder网络接口,实现新闻数据的远程获取与解析。在Repository中使用withContext(Dispatchers.IO)进行协程挂起请求,通过JSONObject解析title、body、id字段并构建News对象。结合ViewModel与StateFlow更新页面状态,利用AsyncImage加载图片,并添加失败提示与手动重试机制。完整覆盖从网络请求、数据转换到界面更新的全流程,深化对协程调度、状态管理与图片加载的理解。

Easyhood的博客 182

Android 网络与实时通信实践:请求、上传、WebSocket、RTM 与断网调试

网络与实时通信的稳定性来自状态和边界:HTTP 成功不等于业务成功,上传完成不等于业务确认,WebSocket 连接成功不等于消息送达,客户端不重复显示也不等于服务端只执行一次。只有明确认证、协议、顺序、幂等、取消和生命周期,才能在真实项目中安全地重试、恢复和定位问题。

路在脚下,幸福在手中,莫贪!!!!! 161

Android开发:androidx.cardview.widget.CardView 详解(Java)

本文详解 AndroidX CardView(Java)的使用,涵盖依赖引入、布局配置、核心属性(如圆角、阴影、内边距)及常见问题。重点说明 cardPreventCornerOverlap 与图片圆角裁剪解决方案,推荐结合 ShapeableImageView 实现完整圆角效果,并通过 Foreground 添加点击涟漪,提升 Material Design 风格界面体验。

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 307

RHCE——Web 服务器(nginx)章节综合练习

本实验基于RHEL9.3搭建LNMP综合站点,实现HTTPS加密、认证下载、PHP动态页面及MySQL数据展示,并完成HTTP到HTTPS的301跳转。通过配置nginx虚拟主机、自签证书、htpasswd认证、fastcgi_pass连接php-fpm,以及mysqli访问MySQL,成功满足五项功能要求。实验涵盖安全策略(SELinux、防火墙)、权限管理与故障排查,验证了网络服务部署与排错能力。

AstartesEternal的博客 347
上一篇: Android之socket通信
下一篇: android之设计模式
JavaLearner12
博客等级 码龄15年 2粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值