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的过程,本文将要介绍在应用程序内部 ...
随机推荐
- 关于MTK平台SIM-ME Lock的配置方案
针对一些运营商的锁网需求,MTK平台已经对其有很好的支持.绝大多数的海外需求可以通过直接配置相关文件来完成.这里简单描述一下配置方法,不做原理分析. 相关数据结构分析: Modem中与SML锁网配置相 ...
- 背包问题matlab程序
clearclca=0.95k=[5;10;13;4;3;11;13;10;8;16;7;4];k=-k;d=[2;5;18;3;2;5;10;4;11;7;14;6];restriction=46; ...
- Java操作*.properties
java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properti ...
- android Bind机制(二)
1.binder通信概述 binder通信是一种client-server的通信结构, 1.从表面上来看,是client通过获得一个server的代理接口,对server进行直接调用: 2 ...
- [转载]C#控制台应用程序里调用自己写的函数的方法
(2011-08-15 15:52:13) 转载▼ 标签: 转载 分类: 技术类 原文地址:C#控制台应用程序里调用自己写的函数的方法作者:萧儿 最近写程序,遇到了一个很白痴的问题,记录下来,免得下次 ...
- jQuery的dataTables插件实现中文排序
最近在写Java web. 写JSP的时候发现一个很好玩的插件dataTables.分页.过滤.排序等等手到擒来. 哎哎哎,有点点可惜的是排序这个功能不支持中文.于是网上查查找找,现在把方法整理一下, ...
- git远程分支--remote
查看所有远程引用: $ git ls-remote From ssh://someone@example/testgit ebf3ef7551603cd57a699e80db0bfab36d1aa7b ...
- 裸二分图匹配poj1469
poj1496 题意: 给你p门课程和n个学生,一个学生可以选0门,1门,或者多门课程, 现在要求一个由p个学生组成的集合,满足下列2个条件: 1.每个学生选择一个不同的课程 2.每个课程都有不同的代 ...
- vim编程配置方法
vim简介Vim 有以下几个模式:1) 正常(normal)模式,缺省的编辑模式:下面如果不加特殊说明,提到的命令都直接在正常模式下输入:任何其它模式中都可以通过键盘上的 Esc 键回到正常模式.2) ...
- iOS使用NSMutableAttributedString
在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求.之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用html5实现的,都比较麻烦 ...