Android与路由器连接服务
界面UI:
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;
private ClientThread clientThread = null;
private Message MainMsg;
public static Handler mainHandler;
static final int TIPS_UPDATE_UI = 3; //tips_update_ui
@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); }
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;
}
super.handleMessage(msg);
}
};
} }
子线程连接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 = 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; //获取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); } 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必须初始化Looper childHandler = 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);
} }
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"
/> </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> </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>
Android与路由器连接服务的更多相关文章
- Linux实战教学笔记05:远程SSH连接服务与基本排错(新手扫盲篇)
第五节 远程SSH连接服务与基本排错 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 远程连接LInux系统管理 1.1 为什么要远程连接Linux系统 在实际的工作场景中,虚拟机界面或物理 ...
- 71.Android之长连接实现
转载:http://blog.csdn.net/qq_23547831/article/details/51690047 本文中我们将讲解一下App的长连接实现.一般而言长连接已经是App的标配了,推 ...
- Cisco SG300系列交换机划分VLan与普通路由器连接配置
思科SG300系列三层交换机是针对中小企业设计的一款产品,Marvell 主控和128M Ram,最大支持52个千兆RJ45端口和2个SFP端口,因公司业务需求,最近也进行了解和配置,具体型号为 SG ...
- ArcGIS Runtime for Android 使用异步GP服务绘制等值线
关于基于Android上ArcGIS Server GP服务的调用,已经有前辈给出了很好的例子: http://blog.csdn.net/esrichinacd/article/details/92 ...
- android 检查网络连接状态实现步骤
获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.AC ...
- Android开发-API指南-服务
Service 英文原文:http://developer.android.com/guide/components/services.html 采集(更新)日期:2014-12-23 原博客:htt ...
- Android应用程序绑定服务(bindService)的过程源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6745181 Android应用程序组件Serv ...
- Android中使用HTTP服务
在Android中,除了使用java.net包下的API访问HTTP服务之外,我们还可以换一种途径去完成工作.Android SDK附带了Apache的HttpClient API.Apache Ht ...
- Android应用程序绑定服务(bindService)的过程源码分析
Android应用程序组件Service与Activity一样,既能够在新的进程中启动,也能够在应用程序进程内部启动:前面我们已经分析了在新的进程中启动Service的过程,本文将要介绍在应用程序内部 ...
随机推荐
- 利用scrollTop 制作图片无缝滚动
<!doctype html><title>javascript无缝滚动 by 司徒正美</title><meta charset="utf-8&q ...
- weblogic一些基本概念
<收藏过来的----------http://www.cnblogs.com/cocowool/archive/2012/04/01/2428861.html> WebLogic中的一些基 ...
- SQL函数学习(三):convert()函数
格式:CONVERT(data_type,expression[,style])说明:此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,c ...
- 数据结构 B树 B+树 B*树 LSM-树
从B树.B+树.B*树谈到R 树 http://blog.csdn.net/v_JULY_v/article/details/6530142/ B-tree.B+tree和LSM-tree http: ...
- The type java.util.Map$Entry cannot be resolved. It is indirectly referenced from required .class files
JDK版本的问题. 解决方法: 原来jdk1.8不向下兼容,用回1.6的就可以了. 下图有三个jdk,前两个自己装的,第三个MyEclipse自带的.
- tomcat session失效时间
conf\web.xml <session-config> <session-timeout>600</session-timeout> </session- ...
- vs打开项目,创建虚拟目录,提示权限不足无法写入配置文件
如题,从源代码管理器上获取下来程序后,自己打开始,提示如题,尝试过以管理员启动vs,给目录权限提升,修改csproj项目配置文件(修改userIIS节点)and so on,无意间在用别的文档编辑器编 ...
- 711B - Chris and Magic Square 模拟
题目大意:在num[i][j]==0处填一个数使每行,每列,对角线的和相同,若果有多种答案输出一种. 题目思路:模拟 #include<iostream> #include<algo ...
- 本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密算法。
BASE64编码算法不算是真正的加密算法. MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法.我们通常只把他们作为加密的基础.单纯的以上 ...
- 修改jsonb的属性
CREATE FUNCTION jsonb_merge(JSONB, JSONB) RETURNS JSONB AS $$ WITH json_union AS ( SELECT * FROM JSO ...