概述
主要功能为手机与远程服务器进行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进制数据传输实例的全部内容,希望文章能够帮你解决AndroidTCP通信,16进制数据传输实例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复