zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Oracle数据库
    Python-aiohttp百万并发
    Sentry的安装搭建与使用
    traceroute命令初探
    Python中断言与异常的区别
    二十三种设计模式及其python实现
    Celery
    SQLAlchemy
    python里使用reduce()函数
    python实现栈
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3320480.html
Copyright © 2011-2022 走看看