最近一个小项目需要将安卓机上获取到的一些信息发送到web后台上去,安卓机上的app代码是现成的,只需要稍微修改一下就可重新打包安装运行,web后台一开始是想通过springMVC的controller来利用底层servlet的doPost和doGet去处理客户端发送的http请求,但无论怎么尝试好像都失败了,无奈下只得采用建立TCP连接,利用Socket编程来实现通信。
-
需求
app上设置一个button,点击以后将文本信息发送到web后台上去; -
实现
/**
* button的点击函数实现
*/
private class OnSendMessageToServer implements OnClickListener {
@Override
public void onClick(View view) {
//客户端
MessageThread messageThread = new MessageThread();
messageThread.start();
}
}
public class MessageThread extends Thread {
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
//1、创建客户端Socket,指定服务器地址和端口
Socket client = new Socket("10.134.28.22", 10086);
PrintWriter output =
new PrintWriter(client.getOutputStream(), true);
String words = dateFormat.format(new Date()) + tagList.toString();
//tagList.size();
output.println(words);
output.flush();
client.shutdownInput();
output.close();
client.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
@Override
public void run() {
Looper.prepare();
new Handler().post(runnable);//在子线程中直接去new 一个handler
/*int i = 0;
while (i < 100) {
new Handler().post(runnable);//在子线程中直接去new 一个handler
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
i ++;
}*/
Looper.loop();//这种情况下,Runnable对象是运行在子线程中的,可以进行联网操作,但是不能更新UI
}
}