• 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,希望各位能指出,谢谢~~

  • 相关阅读:
    c++实现执行脚本命令
    常用命令
    ssh2.cpp
    通过scp传输文件到多个主机
    启动和监控脚本
    centos 7.2 svn 安装
    SVN提交时必须填写备注信息 配置
    centos 7.2 配置mysql
    centos 7.2 配置Nginx
    js调试的时候用console.log("变量"+scrollTop+windowHeight)
  • 原文地址:https://www.cnblogs.com/zxh1210603696/p/3319178.html
Copyright © 2020-2023  润新知