Android使用LocalSocket抓取数据
16lz
2021-01-24
LocalSocket类描述:在Unix域名下创建一个(非服务器)Socket,这种Socket和java.net.Socket不同
贴上一个LocalSocket简单应用
package com.snowice.local;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android.app.Activity;import android.net.LocalServerSocket;import android.net.LocalSocket;import android.net.LocalSocketAddress;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;public class AndroidLocalSocketActivity extends Activity {private static final String TAG = "MY_LOCAL_SOCKET";/** 开始演示按钮 */private Button button_start;/** 结束演示按钮 */private Button button_end; private LocalSocket receiver; private LocalSocket sender;private LocalServerSocket lss;/** 数据缓冲大小 */private static final int BUFFER_SIZE = 500000;/** 判断是否正在运行 */private boolean running;/** 用于计数 */private int i = 1; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button_start = (Button) findViewById(R.id.button_start); button_end = (Button) findViewById(R.id.button_end); // 设置监听事件 button_start.setOnClickListener(new Button.OnClickListener(){@Overridepublic void onClick(View v) { receiver = new LocalSocket(); try {lss = new LocalServerSocket("Local_Socket");receiver.connect(new LocalSocketAddress("Local_Socket"));receiver.setReceiveBufferSize(BUFFER_SIZE);receiver.setSendBufferSize(BUFFER_SIZE);sender = lss.accept();sender.setReceiveBufferSize(BUFFER_SIZE);sender.setSendBufferSize(BUFFER_SIZE);// 将控制器running设置为truerunning = true;// 启动发送接受线程new Thread (local_send).start();new Thread (local_receive).start();} catch (IOException e) {e.printStackTrace();}}}); // 取消数据发送 button_end.setOnClickListener(new Button.OnClickListener(){ @Overridepublic void onClick(View v) { running = false; } }); } // 发送线程 Thread local_send = new Thread (){ // 线程运行函数 public void run() { OutputStream m_Send = null; try {m_Send = sender.getOutputStream();while(running) {byte[] data = ("LOCAL-SOCKET" + i).getBytes();sender.setSendBufferSize(data.length);sender.setReceiveBufferSize(data.length);m_Send.write(data);m_Send.flush();Thread.sleep(100);i ++;}m_Send.close();sender.close();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();} } }; // 接收线程 Thread local_receive = new Thread(){ public void run(){ InputStream m_Rece = null; try {m_Rece = receiver.getInputStream();byte[] data;int receiveLen = 0;while(running) {receiveLen = receiver.getReceiveBufferSize();data = new byte[receiveLen];m_Rece.read(data);Log.i(TAG, "receiver.getReceiveBufferSize()" + receiveLen + " --- "+new String(data) + " ---");Thread.sleep(1000);// 将i设为0i = 0;}m_Rece.close();receiver.close();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();} } };}
更多相关文章
- Android(安卓)EditText 自定义带删除按钮
- Android系列之Message机制的灵活应用
- android 学习笔记2——实现基本功能
- Android(安卓)重写返回键
- Android自动化工具Monkeyrunner使用(五)
- 如何分析解决Android(安卓)ANR
- 第20章、OnCheckedChangeListener事件(从零开始学Android)
- android中使用线程(比如修改textview的text)
- android 自定义按钮样式