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手机签到应用服务器架构的更多相关文章

  1. andriod手机签到应用服务器设计

    最近导师要求我和另一个同学开发一个手机上课签到应用,我负责客户端和服务器之间的通信架构编写和数据的存储 本人大学四年只用过汇编和C/C++,因此对andriod开发还是一窍不通,花了一个星期写出来了基 ...

  2. 高校手机签到系统——Ksoap2的一些使用心得(补充)

    高校手机签到系统系列: 高校手机签到系统——第一部分Authority权限系统(上) 高校手机签到系统——第一部分Authority权限系统(下) 高校手机签到系统——手机客户端 高校手机签到系统—— ...

  3. 高校手机签到系统——zxing.net生成二维码(补充)

    高校手机签到系统——第一部分Authority权限系统(上) 高校手机签到系统——第一部分Authority权限系统(下) 高校手机签到系统——手机客户端 关于zxing.net的使用网上已有很多说明 ...

  4. 高校手机签到系统——第一部分Authority权限系统(下)

    很抱歉,之前寝室光纤断了,所以到现在才更新这个系列的第二篇博客.点击访问高校手机签到系统——第一部分Authority权限系统(上) 这几天我反思了一下上一篇写博上的方式,一味的贴代码式的,是否应该更 ...

  5. 高校手机签到系统——第一部分Authority权限系统(上)

    序:今天开始写一个算是我第一个系列的文章——高校手机签到系统.本系统结合我们学校自身的一些特点编写.这是我的毕业设计项目,写在这里算是给最后论文的时候一些点滴的记录.另外也想通过这个系列的文章找到一份 ...

  6. 手机服务器微架构设计与实现 之 http server

    手机服务器微架构设计与实现 之 http server ·应用 ·传输协议和应用层协议概念 TCP  UDP  TCP和UDP选择 三次握手(客户端与服务器端建立连接)/四次挥手(断开连接)过程图 · ...

  7. 如何查询当前手机的cpu架构,so库导入工程又出异常了?

    执行adb命令: adb shell cat /proc/cpuinfo 对应文件夹 AArch64 == arm64-v8a ARMv7 == armeabi-v7a ............等 其 ...

  8. charles-抓包Andriod 手机的设置

    长按弹出 修改后: charles如果不配置SSL通用证书: 会导致HPPTS协议的域名抓取失败/乱码的现象: 现在SSL越来越多,很多博客都上了SSL,支付相关的行业更是基础配置: charles配 ...

  9. 关于Android手机CPU不同架构的问题

    1.共有7种架构 armeabiv-v7a: 第7代及以上的 ARM 处理器.2011年15月以后的生产的大部分Android设备都使用它. arm64-v8a: 第8代.64位ARM处理器,很少设备 ...

随机推荐

  1. form表单target的用法,实现无刷新提交页面

    form表单的target,当将iframe设置为隐藏时,可以实现当前页表单提交而不进行跳转刷新.代码如下,首页在页面里准备一个form表单和一个iframe. <form action=&qu ...

  2. HTML在Select具体的使用说明

    <html> <head> <SCRIPT LANGUAGE="JavaScript"> <!-- //oSelect 列表的底部加入了一 ...

  3. java设计模式之二抽象工厂模式(Abstract Factory)

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...

  4. Nagios监控lvs服务

    1在lvs server上安装nrpe客户端: 1.1,rpm方式安装nrpe客户端 下载地址:http://download.csdn.net/detail/mchdba/7493875 [root ...

  5. 对JSON数组对象排序-有键相同的元素,分组数量不一致,可采用如下的JS进行循环表格输出

    var now=eval(data.data); // now.sort(sortBy('bigIdOrder', true, parseInt)); var tab=""; va ...

  6. 上海及周边地区产品技术创业QQ群:98905958

    创业是一件骄傲的事,每一个行业里最棒人才都应该创业或參与创业或以一个创业者的心态进行职业远景规划: 创业是一件寻常的事,跟上班打工一样寻常,没有什么必须的前置条件才干够開始,也没有什么前置条件能保证我 ...

  7. Ninject.Extensions.

    最近在使用IoC进行一个较复杂的项目进行架构,在IoC的选择上让我很是纠结.首先我不喜欢大量的配置文件进行配置,那简直是噩梦,比学习一门编程语言还痛苦.我喜欢前一段时间看EF的CodeFirst的那种 ...

  8. ReSharper C++计划上市

    ReSharper是著名的VS代码生成工具,去年夏天,JetBrains公司就发布了ReSharper将推出支持C++的版本. ReSharper C++ EAP(Early Access Progr ...

  9. 一个可以直接使用的MsgBox基于form居中API

    可直接复制DialogBox项目(文件夹)到需要的项目中然后直接引用和using CodeProject.Dialog 已修正原作者代码错误的地方,可直接使用,VS2010测试成功 具体可以参考案例T ...

  10. [WebGL入门]十六,绘制多个模型

    注意:文章翻译http://wgld.org/.原作者杉本雅広(doxas),文章中假设有我的额外说明,我会加上[lufy:],另外.鄙人webgl研究还不够深入.一些专业词语.假设翻译有误.欢迎大家 ...