Android Socket Transference R&D

本文介绍如何在Android设备与PC之间通过Socket建立通信连接。包括两种场景:一是PC作为服务器,Android作为客户端;二是PC作为客户端,Android作为服务器。并提供具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.setnull);

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(hostport);

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();

}

}

}

### Comsol 中磷酸铁锂(LFP)电池材料参数设置方法 #### 几何建模与网格划分 在Comsol中构建磷酸铁锂电池模型前,需先创建几何结构并进行合理的网格划分。对于典型的LFP电池而言,主要组件包括正极、负极、隔膜和集流体等部分[^1]。 #### 正极材料参数设定 针对正极活性物质LiFePO₄,在定义物理场接口时应指定如下属性: - **扩散系数**:通常取值范围为\(D_{pos} \approx 10^{-14}\,m^{2}/s\)到\(10^{-13}\,m^{2}/s\)[^2]。 - **交换电流密度**:依据实验数据或文献报道选取合适数值,一般约为\(i_0=1\times10^{-5}-1\times10^{-7}\,\text{A/m}^2\)。 - **固相反应动力学常数**:此参数用于描述电荷转移过程的速度,具体数值依赖于实际工况条件下的测试结果。 ```matlab % 定义正极材料参数 parameters.pos_diffusion_coefficient = 1e-14; % 扩散系数 m²/s parameters.pos_exchange_current_density = 1e-6; % 交换电流密度 A/m² ``` #### 负极材料参数设定 石墨作为常见的负极材料之一,其重要特性有: - **嵌入/脱出电压平台**:约0.1V vs Li/Li⁺至0.3V之间变化。 - **扩散速率**:较之正极为高,大约处于\(D_{neg}=10^{-12}\sim10^{-10}\,m^{2}/s\)区间内。 ```matlab % 定义负极材料参数 parameters.neg_diffusion_coefficient = 1e-11; % 扩散系数 m²/s ``` #### 电解质溶液性质配置 考虑到LFP体系常用的有机碳酸酯类溶剂基电解液,应当输入以下几项关键指标: - **离子传导率σ**:室温条件下可达到\(10^{-3}\sim10^{-2}\,S/cm\)级别。 - **迁移数t⁺**:指阳离子携带总电流的比例,对于大多数商用配方来说接近0.4左右。 ```matlab % 定义电解质参数 parameters.electrolyte_conductivity = 1e-3; % 导电率 S/cm parameters.cation_transference_number = 0.4; % 迁移数 t+ ``` 通过上述指导可以完成基本的材料参数初始化工作,之后还需进一步调整优化各边界条件及初始状态以确保模拟精度满足研究需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值