Android接收wifi路由器发送过来的一组字节数据

高斋晓开卷,独共圣人语。这篇文章主要讲述Android接收wifi路由器发送过来的一组字节数据相关的知识,希望能为你提供帮助。
1、字节数组转换为字符串
byte[] byBuffer = new byte[20];
... ...
String strRead = new String(byBuffer);
strRead = String.copyValueOf(strRead.toCharArray(), 0, byBuffer.length]);
2、字符串转换成字节数组
byte[] byBuffer = new byte[200];
String strInput="abcdefg";
byBuffer= strInput.getBytes();
注意:如果字符串里面含有中文,要特别注意,在Android系统下,默认是UTF8编码,一个中文字符相当于3个字节,只有gb2312下一个中文相当于2字节。这种情况下可采取以下办法:
byte[] byBuffer = new byte[200];
String strInput="我是字符串";
byBuffer= strInput.getBytes("gb2312");
 
主界面代码

package my.work.Library; import java.util.Timer; import java.util.TimerTask; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; public class WsnActivty extends Activity { /** Called when the activity is first created. */ private Button btnNetwork; private String strIpAddr = null; static TextView textTips,seat; private ClientThread clientThread = null; private Message MainMsg; public static Handler mainHandler; static final int TIPS_UPDATE_UI = 3; //tips_update_ui static final int SEAT_UPDATE_UI = 6; //seat_update_uistatic final int MAX_NODE = 4; static byte NodeData[][] = new byte[MAX_NODE][5]; ; // [5] 0=温度 1=湿度 2=气体 3=灯 static final int RX_DATA_UPDATE_UI = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initControl(); initMainHandler(); } private void initControl() { // TODO Auto-generated method stub btnNetwork = (Button) findViewById(R.id.btn_network); btnNetwork.setOnClickListener(new ButtonClick()); textTips = (TextView) findViewById(R.id.Tips); textTips.setText(R.string.init_tips); seat = (TextView) findViewById(R.id.statc001); seat.setText(R.string.people1); } class ButtonClick implements OnClickListener { @Override public void onClick(View v) {switch (v.getId()) { case R.id.btn_network: // 连接网络 showDialog(WsnActivty.this); break; } } }// 显示连接对话框 private void showDialog(Context context) { final EditText editIP = new EditText(context); editIP.setText("192.168.0.10"); AlertDialog.Builder builder = new AlertDialog.Builder(context); // builder.setIcon(R.drawable.ic_launcher); builder.setTitle("请输入服务器IP地址"); builder.setView(editIP); builder.setPositiveButton("连接", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { strIpAddr = editIP.getText().toString(); boolean ret = isIPAddress(strIpAddr); if (ret) { textTips.setText("服务器IP地址:" + strIpAddr); } else { strIpAddr = null; textTips.setText("IP地址不合法,请重新设置"); return; }clientThread = new ClientThread(strIpAddr); // 建立客户端线程 clientThread.start(); //mainTimer = new Timer(); // 定时查询所有终端信息 //setTimerTask(); } }); builder.setNeutralButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { if (clientThread != null) { MainMsg = ClientThread.childHandler .obtainMessage(ClientThread.RX_EXIT); ClientThread.childHandler.sendMessage(MainMsg); textTips.setText("与服务器断开连接"); } } }); builder.show(); }// 判断输入IP是否合法 private boolean isIPAddress(String ipaddr) { boolean flag = false; Pattern pattern = Pattern .compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b"); Matcher m = pattern.matcher(ipaddr); flag = m.matches(); return flag; }void initMainHandler() { mainHandler = new Handler() {// 主线程消息处理中心 public void handleMessage(Message msg) { switch (msg.what) { case TIPS_UPDATE_UI: String str = (String) msg.obj; //连接成功 textTips.setText(str); break; case SEAT_UPDATE_UI: String strseat = (String) msg.obj; //连接成功 seat.setText(strseat); break; } super.handleMessage(msg); } }; }}

【Android接收wifi路由器发送过来的一组字节数据】子线程代码
package my.work.Library; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.widget.Toast; public class ClientThread extends Thread {private OutputStream outputStream = null; private InputStream inputStream = null; private Socket socket; private SocketAddress socketAddress; public static Handler childHandler; private boolean RxFlag = true; final int TEXT_INFO = 12; static final int RX_EXIT = 11; static final int TX_DATA = https://www.songbingjia.com/android/10; Context mainContext; Message msg; private String strIP; final int SERVER_PORT = 33333; byte cNodeData[][] = new byte[4][5]; // [5] 0=温度 1=湿度 2=气体 3=灯 int RxCount = 0, nRecvLen, index = 0; byte CheckSum; // byte strRxBuf[] = new byte[256]; int ucRecvLen = 7; private RxThread rxThread; //获取WsnActivty.java 开辟子线程clientThread对象线程传递过来的ip地址 public ClientThread(String ip) { strIP = ip; }// 连接网络 void connect() { RxFlag = true; socketAddress = new InetSocketAddress(strIP, SERVER_PORT); socket = new Socket(); try { socket.connect(socketAddress, SERVER_PORT); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); msg = WsnActivty.mainHandler.obtainMessage( WsnActivty.TIPS_UPDATE_UI,"连接成功"); WsnActivty.mainHandler.sendMessage(msg); rxThread = new RxThread(); rxThread.start(); } catch (IOException e) { try { sleep(10); } catch (InterruptedException e1) { e1.printStackTrace(); } msg = WsnActivty.mainHandler.obtainMessage( WsnActivty.TIPS_UPDATE_UI, "无法连接到服务器"); WsnActivty.mainHandler.sendMessage(msg); e.printStackTrace(); } catch (NumberFormatException e) {} }void initChildHandler() {Looper.prepare(); // 在子线程中创建Handler必须初始化LooperchildHandler = new Handler() { // 子线程消息处理中心 public void handleMessage(Message msg) {// 接收主线程及其他线程的消息并处理... /** * MainMsg = ClientThread.childHandler.obtainMessage(ClientThread.TX_DATA, * len, 0, (Object) buffer); * SendData(SendBuf, 7); */ switch (msg.what) {case RX_EXIT: RxFlag = false; try { if (socket.isConnected()) { inputStream.close(); outputStream.close(); socket.close(); }} catch (IOException e1) { e1.printStackTrace(); }childHandler.getLooper().quit(); // 结束消息队列break; default: break; }} }; // 启动该线程的消息队列 Looper.loop(); }public void run() { connect(); initChildHandler(); msg = WsnActivty.mainHandler.obtainMessage(WsnActivty.TIPS_UPDATE_UI, "与服务器断开连接"); WsnActivty.mainHandler.sendMessage(msg); }// socket 接收线程 public class RxThread extends Thread { public void run() { try { while (socket.isConnected() & & RxFlag) { byte strRxBuf[] = new byte[30]; byte i; int RxIndex, len, readBytes = 0; //msg = WsnActivty.mainHandler.obtainMessage( //WsnActivty.SEAT_UPDATE_UI, "有人"); //WsnActivty.mainHandler.sendMessage(msg); // len = inputStream.read(strRxBuf, readBytes, ucRecvLen - readBytes); String strRead = new String(strRxBuf); strRead = String.copyValueOf(strRead.toCharArray(), 0, strRxBuf.length); msg = WsnActivty.mainHandler.obtainMessage( WsnActivty.SEAT_UPDATE_UI, strRead); WsnActivty.mainHandler.sendMessage(msg); } if (socket.isConnected()) socket.close(); } catch (IOException e) { e.printStackTrace(); } } }byte GetDataLen(byte fc) { byte len = 0; switch (fc) { case 0x01: len = 22; break; case 0x07: case 0x08: case 0x0A: case 0x0B: case 0x0C: case 0x0D: len = 7; break; }return len; }}

main.xml
< ?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > < TextView android:id="@+id/Tips" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/init_tips" android:textSize="40px" android:textColor="#00ff00" /> < Button android:id="@+id/btn_network" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/login" android:textSize="40px" android:textColor="#00ff00" /> < TextView android:id="@+id/statc001" android:layout_width="wrap_content" android:layout_height="wrap_content"android:textSize="40px" android:textColor="#00ff00" /> < TextView android:id="@+id/statc002" android:layout_width="wrap_content" android:layout_height="wrap_content"android:textSize="40px" android:textColor="#00ff00" /> < TextView android:id="@+id/statc003" android:layout_width="wrap_content" android:layout_height="wrap_content"android:textSize="40px" android:textColor="#00ff00" /> < TextView android:id="@+id/statc004" android:layout_width="wrap_content" android:layout_height="wrap_content"android:textSize="40px" android:textColor="#00ff00" /> < TextView android:id="@+id/statc005" android:layout_width="wrap_content" android:layout_height="wrap_content"android:textSize="40px" android:textColor="#00ff00" /> < /LinearLayout>

string.xml
< ?xml version="1.0" encoding="utf-8"?> < resources> < string name="login"> 连接服务器< /string> < string name="app_name"> 梧州学院图书馆刷卡入座系统< /string> < string name="move"> 获取视频流< /string> < string name="init_tips"> 提示:请先打开WiFi或GPRS再连接网络< /string> < string name="people1"> 空座< /string> < string name="people2"> 有人< /string> < /resources>

AndroidManifest.xml
< ?xml version="1.0" encoding="utf-8"?> < manifest xmlns:android="http://schemas.android.com/apk/res/android" package="my.work.Library" android:versionCode="1" android:versionName="1.0" > < uses-sdk android:minSdkVersion="15" /> < application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > < activity android:name=".WsnActivty" android:label="@string/app_name" > < intent-filter> < action android:name="android.intent.action.MAIN" /> < category android:name="android.intent.category.LAUNCHER" /> < /intent-filter> < /activity> < /application> < uses-permission android:name="android.permission.INTERNET"/> < uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> < uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> < uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> < /manifest>

 








    推荐阅读