首页 > 代码库 > AndroidTCP通信,16进制数据传输实例
AndroidTCP通信,16进制数据传输实例
主要功能为手机与远程服务器进行16进制的数据收发,TCPControl类实现了16进制的数据收发功能,其中发送函数设置为每次发送4字节数据,服务器发来的数据在手机上会以Toast的形式显示出来。
代码:http://download.csdn.net/detail/miaoyunzexiaobao/8151831
PS:附件中包含TCP调试助手,使用时将调试助手设置为TCP服务器,并勾选发送与接收栏中的16进制收发的选择项
应用:
1.用户在IP和PORT编辑框中对应值,点击Set按钮,完成服务器参数设置。
2.单击手机上的SendTest按钮,手机将想服务器发送数据。
系统代码执行流程:
1.MainActivity中定义静态String变量IP和静态int变量PORT
2.设置Handler,该Handler用于将接收到的来自服务器的数据显示在手机上
3.在OnCreate函数中获取btnSet和btnTest控件,分别设置监听器:btnSet用于设置IP和PORT,btnTest用于向服务器发送16进制的测试数据“6666”
4.在OnCreate函数中创建新线程,该线程用于监听来自服务器的数据,每当收到来自服务器的数据时,会向Handler发送消息,Handler收到消息后会在手机界面上显示。之后线程给服务器返回消息0000,循环
TCPControl类解析:
code:
package com.example.tcptest; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.Socket; public class TCPControl { static Socket s = null; static DataOutputStream dout = null; static DataInputStream din = null; static String backCMD = null; static public int recvCMD() throws Exception { if (s == null) s = new Socket(MainActivity.IP, MainActivity.PORT); if (dout == null) dout = new DataOutputStream(s.getOutputStream()); if (din == null) din = new DataInputStream(s.getInputStream()); Thread.sleep(50, 0); for (int i = 0; i < 10; i++) { if (din.available() > 0) { /* 客户端非16进制发送 byte[] buffer = new byte[din.available()]; System.out.println(din.available()); din.read(buffer); backCMD = "Msg from peer:" + new String(buffer); */ int backLength = din.available(); char[] buffer = new char[backLength]; for(int j = 0 ; j < backLength ; ++j) { buffer[j] = (char) din.readByte(); buffer[j] = (char) (buffer[j] + '0'); } backCMD = new String(buffer); return 1; } else { Thread.sleep(500, 0); return 0; } }; return 0; } static public void sendCMD(final String cmd) { try { if (s == null) s = new Socket(MainActivity.IP, MainActivity.PORT); if (dout == null) dout = new DataOutputStream(s.getOutputStream()); if (din == null) din = new DataInputStream(s.getInputStream()); Thread.sleep(50, 0); // 实际中刚连上后发数据需要一定延时 确保双方链接初始化完成 char[] temp = new char[4]; for (int i = 0; i < cmd.length(); ++i) { temp[i] = (char) (cmd.charAt(i) - '0'); } String strTemp = new String(temp); dout.writeBytes(strTemp); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
TCPControl类包含发送和接收两个函数
发送:
用户向服务器发送消息时调用该函数,该函数功能为首先判断套接字是否为空,若为空则根据用户设置的IP和PORT新建一个套接字,之后利用该套接字建立数据收发流,在将要发送的消息cmd转为16进制后利用发送流的writeBytes函数将消息发送至服务器
接收:
首先判断套接字是否为空,若为空则根据用户设置的IP和PORT新建一个套接字,之后利用该套接字建立数据收发流,判断接收流是否收到数据,若收到则将数据转为16进制并返回1,MainActivity中的检测线程若发现接收函数返回值为1,则调用Handler将消息显示出来。若为接收到消息,则会返回0。在该过程中MainActivity的线程会一直调用接收函数,查询服务器是否有消息发送至手机。
AndroidTCP通信,16进制数据传输实例