Android Socket With NodeJS

MainActivity
package com.buzz.beaconlib;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;
import android.widget.TextView;
import android.os.StrictMode;
import android.os.Handler;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Message;
import android.widget.Button;
import android.view.View;
//import android.util.Log;
import android.widget.ArrayAdapter;

import org.codehaus.jackson.map.ObjectMapper;

import java.io.*;
import java.net.*;
import java.lang.*;
import java.util.*;


public class MainActivity extends ActionBarActivity {

    private static String HOST = "192.168.0.106";
    private static int PORT = 2397;
    static String ActiveCMD = "";

    Socket socket;
    Thread socketMsgThread;
    Handler inHandler;
    Handler resultHandler;
    InputStream in;
    ObjectMapper objectMapper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Bundle bundle = getIntent().getExtras();
        HOST = bundle.getString("HOST");
        PORT = Integer.parseInt(bundle.getString("PORT"));

        StrictMode.setThreadPolicy(
                new StrictMode
                        .ThreadPolicy
                        .Builder()
                        .detectDiskReads()
                        .detectDiskWrites()
                        .detectNetwork()
                        .penaltyLog()
                        .build());

        StrictMode.setVmPolicy(
                new StrictMode
                        .VmPolicy
                        .Builder()
                        .detectLeakedSqlLiteObjects()
                        .detectLeakedClosableObjects()
                        .penaltyLog()
                        .penaltyDeath()
                        .build());

        final TextView tvHost = (TextView) findViewById(R.id.tvHost);
        tvHost.setText(HOST);

        final TextView tvPort = (TextView) findViewById(R.id.tvPort);
        tvPort.setText(String.valueOf(PORT));

        try {
            socket = new Socket(HOST, PORT);
        } catch (UnknownHostException e) {
            e.printStackTrace();
            ShowDialog(e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
            ShowDialog(e.getMessage());
        }

        final Button btnGetBeaconInfo = (Button) findViewById(R.id.btnGetBeaconInfo);
        final Button btnGetSysparams = (Button) findViewById(R.id.btnGetSysparams);
        final Button btnGetUserInfo = (Button) findViewById(R.id.btnGetUserInfo);
        final Button btnAddSyslog = (Button) findViewById(R.id.btnAddSyslog);
        final Button btnAddKey = (Button) findViewById(R.id.btnAddKey);
        final Button btnOpen = (Button) findViewById(R.id.btnOpen);
        final Button btnClose = (Button) findViewById(R.id.btnClose);

        btnOpen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    writer.write(GlobalConst.CMD_OPEN);
                    writer.flush();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                } catch (IOException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                }

                ActiveCMD = "06";
            }
        });

        btnClose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    writer.write(GlobalConst.CMD_CLOSE);
                    writer.flush();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                } catch (IOException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                }

                ActiveCMD = "07";
            }
        });

        btnGetBeaconInfo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    writer.write(GlobalConst.CMD_GET_BEACON_INFO);
                    writer.flush();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                } catch (IOException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                }

                ActiveCMD = "01";
            }
        });

        btnGetSysparams.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    writer.write(GlobalConst.CMD_GET_SYS_PARAMS);
                    writer.flush();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                } catch (IOException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                }

                ActiveCMD = "02";
            }
        });


        btnGetUserInfo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    writer.write(GlobalConst.CMD_GET_USER_INFO);
                    writer.flush();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                } catch (IOException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                }

                ActiveCMD = "03";
            }
        });


        btnAddSyslog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    writer.write(GlobalConst.CMD_ADD_SYS_LOG);
                    writer.flush();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                } catch (IOException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                }

                ActiveCMD = "04";
            }
        });


        btnAddKey.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                    writer.write(GlobalConst.CMD_ADD_KEY);
                    writer.flush();
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                } catch (IOException e) {
                    e.printStackTrace();
                    ShowDialog(e.getMessage());
                }

                ActiveCMD = "05";
            }
        });


        objectMapper = new ObjectMapper();

        resultHandler = new Handler() {
            public void handleMessage(Message msg) {
                List<String> ds = new ArrayList<String>();
                switch (msg.what) {
                    case 1:
                        BeaconInfo beaconInfo = (BeaconInfo) msg.obj;
                        ds.add(beaconInfo.getBeacon().get(0).toString());
                        for (triggers t : beaconInfo.getTriggers()) {
                            ds.add(t.toString());
                        }
                        for (contents c : beaconInfo.getContents()) {
                            ds.add(c.toString());
                        }
                        ShowResult(ds);
                        break;

                    case 2:
                        Sysparams[] sysparamsList = (Sysparams[]) msg.obj;
                        for (Sysparams sp : sysparamsList) {
                            ds.add(sp.toString());
                        }
                        ShowResult(ds);
                        break;

                    case 3:
                        UserInfo[] userInfoList = (UserInfo[]) msg.obj;
                        ds.add(userInfoList[0].toString());
                        ShowResult(ds);
                        break;

                    case 4:
                        ShowResult(ds);
                        break;
                }
            }
        };

        inHandler = new Handler() {
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case 1:
                        TextView tvJsonData = (TextView) findViewById(R.id.tvJsonData);
                        tvJsonData.setText(msg.obj.toString());

                        switch (ActiveCMD) {
                            case "01":
                                try {
                                    BeaconInfo beaconInfo = objectMapper.readValue(msg.obj.toString(), BeaconInfo.class);
                                    Message message = new Message();
                                    message.what = 1;
                                    message.obj = beaconInfo;
                                    resultHandler.sendMessage(message);
                                } catch (IOException ex) {
                                    ShowDialog(ex.toString());
                                    return;
                                }
                                break;

                            case "02":
                                try {
                                    Sysparams[] SysparamsList = objectMapper.readValue(msg.obj.toString(), Sysparams[].class);
                                    Message message = new Message();
                                    message.what = 2;
                                    message.obj = SysparamsList;
                                    resultHandler.sendMessage(message);
                                } catch (IOException ex) {
                                    ShowDialog(ex.toString());
                                    return;
                                }
                                break;

                            case "03":
                                try {
                                    UserInfo[] userInfoList = objectMapper.readValue(msg.obj.toString(), UserInfo[].class);
                                    Message message = new Message();
                                    message.what = 3;
                                    message.obj = userInfoList;
                                    resultHandler.sendMessage(message);
                                } catch (IOException ex) {
                                    ShowDialog(ex.toString());
                                    return;
                                }
                                break;

                            default:
                                Message message = new Message();
                                message.what = 4;
                                resultHandler.sendMessage(message);
                                break;
                        }
                        break;
                    default:
                        break;
                }
            }
        };

        try {
            in = socket.getInputStream();
        } catch (Exception ex) {
            return;
        }
        socketMsgThread = new Thread(runnable);
        socketMsgThread.start();
    }

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            String line = "";
            while (true) {
                try {
                    byte[] temp = new byte[10240];// 默认最带为256
                    int size = 0;
                    while ((size = in.read(temp)) > 0) {
                        // -1表示文件结尾
                        byte[] res = new byte[size];// 默认最带为256
                        System.arraycopy(temp, 0, res, 0, size);
                        for (int i = 0; i < size; i++) {
                            line += (char) res[i];
                        }

                        Message message = new Message();
                        message.what = 1;
                        message.obj = line;
                        inHandler.sendMessage(message);
                        line = "";
                    }
                } catch (Exception ex) {
                    return;
                }
            }
        }
    };


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private void ShowResult(List<String> ds){
        ListView lvResult = (ListView) findViewById(R.id.lvResult);
        lvResult.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,ds));
    }

    private void ShowDialog(String msg) {
        new AlertDialog
            .Builder(this)
            .setTitle("notification")
            .setMessage(msg)
            .setPositiveButton("ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
            }).show();
    }
}
core.js
var net=require('net');
var mysql=require('./mysqlpool.js');
var client=require('./doorclient.js');
var fileserver=require('./fileserver.js');
function execute_command(socket, command, args) {  
    switch(command){
      case "90":
        client.open();
        break;

      case "91":
        client.close();
        break;
        
      case "01":
        mysql.getBeaconInfo(socket,args);
        break;

      case "02":
        mysql.getSysparams(socket);
        break;

      case "03":
        mysql.getUserInfo(socket,args);
        break;

      case "04":
        mysql.addSyslog(socket,args);
        break;

      case "05":
        mysql.addKey(socket,args);
    }
};

var s = net.createServer(function(socket) {
    console.log('server connected');

    socket.on('data', function(d) { 
      data = d.toString('utf8').trim();  
      var cmd_re = /^(d{2})+[ ]*(.*)/g;
      cmd_match = cmd_re.exec(data)  
      if (cmd_match) {  
        var command = cmd_match[1];  
        var args = cmd_match[2];  
        console.log(command+" "+args);
        execute_command(socket, command, args);  
      } 
    });

    socket.on('end', function() {
      console.log('server disconnected');
    });

    socket.on('error', function (ex) {
      console.log("ignoring exception: " + ex);
    });

});  
s.listen(2397,'192.168.0.106');
console.log('listen on server port:2397...');
原文地址:https://www.cnblogs.com/ncore/p/4315560.html