界面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与路由器连接服务的更多相关文章

  1. Linux实战教学笔记05:远程SSH连接服务与基本排错(新手扫盲篇)

    第五节 远程SSH连接服务与基本排错 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 远程连接LInux系统管理 1.1 为什么要远程连接Linux系统 在实际的工作场景中,虚拟机界面或物理 ...

  2. 71.Android之长连接实现

    转载:http://blog.csdn.net/qq_23547831/article/details/51690047 本文中我们将讲解一下App的长连接实现.一般而言长连接已经是App的标配了,推 ...

  3. Cisco SG300系列交换机划分VLan与普通路由器连接配置

    思科SG300系列三层交换机是针对中小企业设计的一款产品,Marvell 主控和128M Ram,最大支持52个千兆RJ45端口和2个SFP端口,因公司业务需求,最近也进行了解和配置,具体型号为 SG ...

  4. ArcGIS Runtime for Android 使用异步GP服务绘制等值线

    关于基于Android上ArcGIS Server GP服务的调用,已经有前辈给出了很好的例子: http://blog.csdn.net/esrichinacd/article/details/92 ...

  5. android 检查网络连接状态实现步骤

    获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.AC ...

  6. Android开发-API指南-服务

    Service 英文原文:http://developer.android.com/guide/components/services.html 采集(更新)日期:2014-12-23 原博客:htt ...

  7. Android应用程序绑定服务(bindService)的过程源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6745181 Android应用程序组件Serv ...

  8. Android中使用HTTP服务

    在Android中,除了使用java.net包下的API访问HTTP服务之外,我们还可以换一种途径去完成工作.Android SDK附带了Apache的HttpClient API.Apache Ht ...

  9. Android应用程序绑定服务(bindService)的过程源码分析

    Android应用程序组件Service与Activity一样,既能够在新的进程中启动,也能够在应用程序进程内部启动:前面我们已经分析了在新的进程中启动Service的过程,本文将要介绍在应用程序内部 ...

随机推荐

  1. [ An Ac a Day ^_^ ] hdu 2553 N皇后问题 搜索

    曾经想过一天一AC 坚持下来的确不容易额 (我是没坚持下来 尽量以后坚持…… 经典的N皇后问题 搜索的入门问题 学了这么久竟然一直没敲过 今天敲一下…… 这道题也不是很简单额 纯暴力就超时了 要打一下 ...

  2. 华为配置SSH登陆详细步骤

    理解下SSH登录的过程: 1.建立目的端口为22的TCP连接 2.协商SSH版本 3.协商密钥和算法 4.会话建立 下面为server端的详细配置步骤: 1.创建本地RSA密钥对 rsa local- ...

  3. Saltstack 服务器基本安装

    Salt介绍 Salt是一个基础平台管理工具 Salt是一个配置管理系统,能够维护预定义状态的远程节点 Salt是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据 Salt核心功能 使命令发 ...

  4. iOS学习笔记(01) - 泛型

    决定新开一坑,在不断学习的同时分享自己的学习历程给大家,既是对自己学习的记录,又希望能对大家提供些微的帮助. 这一篇文章主要来介绍泛型的意义.使用与声明方法等. 1.泛型:限制类型 1.1.泛型使用场 ...

  5. NDK常见问题

    1. 忽略编译警告为错误 APP_CPPFLAGS += -Wno-error=format-security 2. android studio 手动编译 __android_log_print 错 ...

  6. 如何在VS2013中显示代码行号

    http://jingyan.baidu.com/article/af9f5a2d2e193543140a4533.html

  7. 外部VBS的调用

    一.QTP调用外部VBS的方法 加到QTP的Resource中 在QTP菜单中设置, 菜单FileàSettingsàResource,将要加载的VB脚本添加进来. 举例: 步骤1:在D盘下新建一个V ...

  8. 1.5后台修改添加TDK

    manager\includes\languages\english.php //注意 是后台的语言包define('BOX_CONFIGURATION_Lin_STORE', 'TDKcss_set ...

  9. UTF8,UTF16,UTF32,UTF16-LE,UTF16-BE,GBK 之间的转换

    Unicode是Unicode.org制定的编码标准,目前得到了绝大部分操作系统和编程语言的支持.Unicode.org官方对Unicode的定义是:Unicode provides a unique ...

  10. CentOS中由一般用户切换为root用户

    --->http://www.centoscn.com/CentOS/help/2014/0624/3173.html 1.打开终端,提示符为“$”,表明该用户为普通用户,此时,直接输su,回车 ...