andriod手机签到应用服务器架构
andriod手机签到应用服务器架构
最近导师要求我和另一个同学开发一个手机上课签到应用,我负责客户端和服务器之间的通信架构编写和数据的存储
本人大学四年只用过汇编和C/C++,因此对andriod开发还是一窍不通,花了一个星期写出来了基本的通信功能
首先是服务器端的架构:
在网络通信上主要有三类网络通信线程,一是定时多播线程将同一局域网内的教师机ip广播给所有学生机,由于一个AP支持的连接数不多,所以才使用定时多播。二是监听线程,接受学生机的tcp连接然后new出签到事务线程。三是事务线程,处理学生的签到信息和返回签到状态,数据库使用andriod自带的Sqlite,由于会有大量事务线程,因此要做好线程同步问题。

1 //主线程主要代码
2 wifiManager= (WifiManager) getSystemService(Context.WIFI_SERVICE);
3
4 mButton.setOnClickListener(new Button.OnClickListener(){
5 @Override
6 public void onClick(View v){
7 mEcho = (TextView)findViewById(R.id.client_text);
8 mEcho.setText("begin");
9
10 //建立一个监听线程
11 TCPListenThread tcpListenThread = new TCPListenThread(port);
12 tcpListenThread.start();
13 /* 建立一个多播线程,要在监听线程建立后才开始建立 */
14 MulticastThread multicastThread = new MulticastThread(wifiManager);
15 multicastThread.start();


1 //多播线程,假设多播一百秒
2 try {
3 Log.i(TAG, "In MulticastThread.run()");
4 InetAddress address = InetAddress.getByName(multiAdderss);
5 multicastSocket = new MulticastSocket();
6 //multicast per second
7 for(int i = 0; i != 100; ++i){
8 String msg = "I'm the teacher, my IP Address is?" + teacherIP;
9 byte[] buf = msg.getBytes();
10 //Constructs a new DatagramPacket object to send data to the port aPort of the address host.
11 DatagramPacket packet=new DatagramPacket(buf,buf.length,address,port);
12 multicastSocket.send(packet);
13 Thread.sleep(1000);
14 }
15 }catch(UnknownHostException e){
16 e.printStackTrace();
17 } catch (IOException e) {
18 e.printStackTrace();
19 } catch (InterruptedException e) {
20 e.printStackTrace();
21 }
22 super.run();


1 //监听线程
2 public void run(){
3 Log.i(TAG, "In TCPListenThread.run()");
4 try {
5 listenSocket = new ServerSocket(mPort);
6 while(true){
7 CheckinSocket = listenSocket.accept();
8 //将签到逻辑交给checkinThread处理
9 CheckinThread checkinThread = new CheckinThread(CheckinSocket);
10 checkinThread.start();
11
12 }
13 } catch (IOException e) {
14 e.printStackTrace();
15 }
16 super.run();
17 }


1 //事务线程主要代码
2 public void run(){
3 Log.i(TAG, "In CheckinThread.run()");
4
5 try {
6 InputStreamReader input = new InputStreamReader( checkinSocket.getInputStream(),"UTF-8");
7
8 char[] b = new char[1024];
9 StringBuilder builder = new StringBuilder();
10 int i;
11 while(( i = input.read(b)) != -1){
12 builder.append(b,builder.length(),i);
13 }
14 String msg = builder.toString();
15 Log.i(TAG, "In CheckinThread.run() msg:"+msg);
16
17 // writeIntoDB(msg);//将msg写入数据库
18
19 checkinSocket.close();
20 } catch (IOException e) {
21 e.printStackTrace();
22 }
23 super.run();
24 }

经多台机子的测试,服务器能正常工作,但由于本人只有一个星期的andriod开发经验,里面的代码难免会有不足和bug,希望各位能指出,谢谢~~
andriod手机签到应用服务器架构的更多相关文章
- andriod手机签到应用服务器设计
最近导师要求我和另一个同学开发一个手机上课签到应用,我负责客户端和服务器之间的通信架构编写和数据的存储 本人大学四年只用过汇编和C/C++,因此对andriod开发还是一窍不通,花了一个星期写出来了基 ...
- 高校手机签到系统——Ksoap2的一些使用心得(补充)
高校手机签到系统系列: 高校手机签到系统——第一部分Authority权限系统(上) 高校手机签到系统——第一部分Authority权限系统(下) 高校手机签到系统——手机客户端 高校手机签到系统—— ...
- 高校手机签到系统——zxing.net生成二维码(补充)
高校手机签到系统——第一部分Authority权限系统(上) 高校手机签到系统——第一部分Authority权限系统(下) 高校手机签到系统——手机客户端 关于zxing.net的使用网上已有很多说明 ...
- 高校手机签到系统——第一部分Authority权限系统(下)
很抱歉,之前寝室光纤断了,所以到现在才更新这个系列的第二篇博客.点击访问高校手机签到系统——第一部分Authority权限系统(上) 这几天我反思了一下上一篇写博上的方式,一味的贴代码式的,是否应该更 ...
- 高校手机签到系统——第一部分Authority权限系统(上)
序:今天开始写一个算是我第一个系列的文章——高校手机签到系统.本系统结合我们学校自身的一些特点编写.这是我的毕业设计项目,写在这里算是给最后论文的时候一些点滴的记录.另外也想通过这个系列的文章找到一份 ...
- 手机服务器微架构设计与实现 之 http server
手机服务器微架构设计与实现 之 http server ·应用 ·传输协议和应用层协议概念 TCP UDP TCP和UDP选择 三次握手(客户端与服务器端建立连接)/四次挥手(断开连接)过程图 · ...
- 如何查询当前手机的cpu架构,so库导入工程又出异常了?
执行adb命令: adb shell cat /proc/cpuinfo 对应文件夹 AArch64 == arm64-v8a ARMv7 == armeabi-v7a ............等 其 ...
- charles-抓包Andriod 手机的设置
长按弹出 修改后: charles如果不配置SSL通用证书: 会导致HPPTS协议的域名抓取失败/乱码的现象: 现在SSL越来越多,很多博客都上了SSL,支付相关的行业更是基础配置: charles配 ...
- 关于Android手机CPU不同架构的问题
1.共有7种架构 armeabiv-v7a: 第7代及以上的 ARM 处理器.2011年15月以后的生产的大部分Android设备都使用它. arm64-v8a: 第8代.64位ARM处理器,很少设备 ...
随机推荐
- python_基础学习_02_拆分文件(spilt)
做爬虫经常会有这样的引用场景 ,原始网页存储格式为 url+\t+ html php 有个explode的 拆分文本行方法,比较方便直接接收列值 list($url,$html)=explode(& ...
- XEvent – SQL Server Log文件对磁盘的写操作大小是多少
原文:XEvent – SQL Server Log文件对磁盘的写操作大小是多少 本篇是上一篇SQL Server Log文件对磁盘的写操作大小是多少的续,使用XEvent收集SQL Server D ...
- 【百度地图API】手机浏览器抓包工具及其使用方法
原文:[百度地图API]手机浏览器抓包工具及其使用方法 摘要:为了测试地图API在手机浏览器上的性能,需要给手机浏览器设置代理.通过代理,我们可以在PC上获取到抓包数据.进而对性能做进一步分析. -- ...
- poj 1068 Parencodings 模拟
进入每个' ) '多少前' ( ', 我们力求在每' ) '多少前' ) ', 我的方法是最原始的图还原出来,去寻找')'. 用. . #include<stdio.h> #incl ...
- PHP的MySQL扩张:MySQL数据库概述
资源:http://www.ido321.com/1023.html 一.SQL:结构化查询语言 SQL(Structured Query Language)是高级的非过程化变成语言.专门用于查询和改 ...
- C#特性和反射
C#特性和反射 .NET编译器的任务之一就是为所有定义和引用的类型生成元数据描述.除了程序集中标准的元数据外,.NET平台还支持特定(attribute)把更多的元数据嵌入到程序集中. .NET特性扩 ...
- CSS3 选择器读解
文章资料来自于W3Cfuns CSS3.0 四个基本的结构性伪类选择器:root 此选择器将绑定到页面的根元素中,所谓根元素,是指文档树中最顶层的元素,也就是<html>部 分. < ...
- 大约xib连接错误bug正确
今天code什么时候,发现xib除了加载问题,研究发现的一个问题 在连接的时候, object一定要选择,您连接view,代替 File's Owner 版权声明:本文博客原创文章,博客,未经同意,不 ...
- PHP程序猿必备的七种武器
作为一个程序猿(又或者是程序媛),出来闯荡江湖,没有几种必杀技在手,那是肯定无法赢得江湖名声的,除了必杀技之外,武器也是很重要的,但是一把青钢剑,肯定是无法赢得万千少男少女的欢心的.就连小李飞刀,人家 ...
- 从零开始学习jQuery(剧场版) 你必须知道的javascript
原文:从零开始学习jQuery(剧场版) 你必须知道的javascript 一.摘要 本文是jQuery系列教程的剧场版, 即和jQuery这条主线无关, 主要介绍大家平时会忽略的一些javascri ...