基于Android 实现局域网内设备之间的通信(物联网)

1.硬件设备有,称重机器,网络摄像头,还有主控机器(单片机,modbus协议),主要是通过手机端的Android应用程序去控制主控设备进行拍照和称重等操作,然后把数据上传到服务器,除了手机把采集到的信息上传到服务器以外的一切操作是基于局域网去完成的,不需要外网。我现在遇到的问题是不知道怎么在android 应用程序(已经开发了的)当中添加这部分功能。该怎么上手?有没有大神可以帮我分析一下?小型局域网,用tcp协议好还是udp协议好?

最简单的是做一个web服务器(jsp+tomcat),客户端android使用httpclient提交数据以及得到返回的结果,再显示出来

这里有个例子代码:

public class HttpClient_Get_Activity extends Activity {

   public TextView myTextView = null;

   @Override

   protected void onCreate(Bundle savedInstanceState) {

      // TODO Auto-generated method stub

      super.onCreate(savedInstanceState);

      this.setContentView(R.layout.httpget_httpclient_activity);



      Button btn = (Button)this.findViewById(R.id.button1);

      btn.setOnClickListener(new Button.OnClickListener(){



         @Override

         public void onClick(View v) {

              new ReadHttpGet().execute("http://190.160.10.79:7890/handler1.ashx");

         }



      });

   }

    class ReadHttpGet extends AsyncTask<Object, Object, Object>

    {



      @Override

      protected Object doInBackground(Object... params) {

         // TODO Auto-generated method stub



         HttpGet httpRequest = new HttpGet(params[0].toString());

         try

         {

            HttpClient httpClient = new DefaultHttpClient();

            HttpResponse httpResponse = httpClient.execute(httpRequest);



            if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK)

            {

                String strResult = EntityUtils.toString(httpResponse.getEntity());

                return strResult;

            }

            else

            {

                return "请求出错";

            }

         }

         catch(ClientProtocolException e)

         {



         }

         catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

         }



         return null;

      }



      @Override

      protected void onCancelled(Object result) {

         // TODO Auto-generated method stub

         super.onCancelled(result);

      }



      @Override

      protected void onPostExecute(Object result) {

         // TODO Auto-generated method stub

         super.onPostExecute(result);



         try

         {

            //创建一个JSON对象

            JSONObject jsonObject = new JSONObject(result.toString()).getJSONObject("parent");

            //获取某个对象的JSON数组

            JSONArray jsonArray = jsonObject.getJSONArray("children");



            StringBuilder builder = new StringBuilder();



            for(int i = 0; i<jsonArray.length(); i++)

            {

                //新建一个JSON对象,该对象是某个数组里的其中一个对象

                JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);



                builder.append(jsonObject2.getString("id")); //获取数据

                builder.append(jsonObject2.getString("title"));

                builder.append(jsonObject2.getString("name"));

            }

            myTextView.setText(builder.toString());

         }

         catch (JSONException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

         }



      }



      @Override

      protected void onPreExecute() {

         // TODO Auto-generated method stub

         //super.onPreExecute();

         Toast.makeText(getApplicationContext(), "开始HTTP GET请求", Toast.LENGTH_LONG).show();

      }



      @Override

      protected void onProgressUpdate(Object... values) {

         // TODO Auto-generated method stub

         super.onProgressUpdate(values);

      }



    }

}

https://www.cnblogs.com/gzggyy/archive/2013/05/08/3066288.html

0.不清楚你使用的modbus是基于RS485还是TCP的;如果只是为了服务端收集数据,手机端不一定是必须的;
1.如果单片机能使用tcp/ip栈如uip,LWip。单片机采集到硬件设备的信息,可以通过mqtt协议,把信息推送到服务端
2.如果单片机不能使用tcp/ip栈只能使用RS485串口,可以买一个4g模块,使用4g模块的dtu模式可以直接与服务端进行通信
3.如果单片机不能连外网,只能通过局域网modbus与手机通信,手机modbus设置成主机,单片机设置成从机
4.单片机modbus协议是通过RS485实现,单片机可以加一个蓝牙模块与手机进行通信,手机modbus主机模式,单片机设置成从机模式
5.服务端可以使用thingsboard开源的物联网平台
一般物联网常用的协议有mqtt和coap