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

最近导师要求我和另一个同学开发一个手机上课签到应用,我负责客户端和服务器之间的通信架构编写和数据的存储

本人大学四年只用过汇编和C/C++,因此对andriod开发还是一窍不通,花了一个星期写出来了基本的通信功能

首先是服务器端的架构:

 

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)