DataTransIn:

 

 

具体接口代码(使用看注释):

View Code
View Code 
     /**
      * @param name 表示存储文件字节的名称,注意文件的路径,最好是全部路径如:  "D:\\eclipse workplace jee\\HelloWeb\\src\\sensor_byte.xml"否则肯能报错。
      * @param isClient 表示是服务器在用还是客户端调用
      */
     public DataTransIn(String xmlname,boolean isClient){
         System.out.println("hello1");
         if(isClient){
             sensorDataBytes=SensorDataBytesC.getInstance(xmlname);
         }
         else{
             System.out.println("hello3");
             sensorDataBytes=SensorDataBytesS.getInstance(xmlname);
             System.out.println("hello3");
         }
         System.out.println("hello2");
         //按照numSizeTable的顺序导入到map 中,没个map都是默认的顺序,所以能够保持所有的顺序一致
         setTemp= sensorDataBytes.getKeySet() ;
     }
     /**
      * 用来将数据从服务器传送到客户端
      * @param treeMap   存储数据的treeMap<String,Interger> Key(String)表示传感器名称,Integer表示表示传感器数值
      * @param id        传送对应账户的id
      * @param gzip      设置是否压缩。
      * @param response   HttpServlet
      * @throws DigitException   数字超出预设会抛出
      * @throws IOException    
      */
     public void setDateToRes(TreeMap<String, Integer> treeMap,String id,boolean gzip,HttpServletResponse response) throws DigitException, IOException{
         InDataTobyteArr(treeMap,StaticFinalVariable.BYTE_TO_CLIENT_XML_NAME_S); 
         addIdToArr(id);
         compressCon(gzip);
         OutputStream outputStream= response.getOutputStream();
         outputStream.write(b);
     }
     /**
      * 把byte数据传到服务器的具体传送部分
      * @param b 数据字节数组
      * @param id
      * @param gzip
      * @param url
      * @return
      */
    public boolean transDate(byte b[],String id,boolean gzip,String url) throws DigitException{
        this.b = b;
        addIdToArr(id);   //
        compressCon(gzip);
        return transDate(url);
    }
     /**
      * 把数据传到服务器
      * @param treeMap 数据map
      * @param id 四位整数的id号
      * @param isZip  0表示不压缩,其他的表示压缩
      * @param url ip 和端口号
      */
     public boolean syncDataToServer(TreeMap<String, Integer> treeMap,String id,boolean gzip,String url) throws DigitException{
 
         InDataTobyteArr(treeMap,StaticFinalVariable.BYTE_STORY_XML_NAME_C); 
         addIdToArr(id);   //
         compressCon(gzip);
         
         return transDate(url);
     }
     /**
      * 自定义压缩下届
      * @param treeMap
      * @param minlength 压缩下届
      * @throws DigitException
      */
     public void syncDataToServer(TreeMap<String, Integer> treeMap,String id,long minlength,String url) throws DigitException{
         
         if(sensorDataBytes.getSumByte()>minlength){
             syncDataToServer(treeMap, id,true,url);
         }
         else{
             syncDataToServer(treeMap,id,false,url);
         }
     }
     /**
      * 按照系统自定义的量去决定是否压缩
      * @param treeMap
      * @throws DigitException
      * @param url ip地址
      */
     public void syncDataToServer(TreeMap<String, Integer> treeMap,String id,String url) throws DigitException{
         if(sensorDataBytes.getSumByte()>StaticFinalVariable.MIN_LENGTH){
             syncDataToServer(treeMap,id, true,url);
         }
         else{
             syncDataToServer(treeMap, id,false,url);
         }
     }

 

DataTransOut:

接口代码(注意看注释):

View Code
 1     /**
 2      * @param name 表示存储文件字节的名称   注意最好是全部路径如:  "D:\\eclipse workplace jee\\HelloWeb\\src\\sensor_byte.xml"否则肯能报错。
 3      * @param isClient 表示是服务器在用还是客户端调用
 4      */
 5     public DataTransOut(String name,boolean isClient) {
 6         // TODO Auto-generated constructor stub
 7         treeMap= new TreeMap<String, Integer>();
 8         if(isClient){
 9             sensorDataBytes=SensorDataBytesC.getInstance(name);
10         }
11         else{
12             sensorDataBytes=SensorDataBytesS.getInstance(name);
13         }
14         //按照numSizeTable的顺序导入到map 中,没个map都是默认的顺序,所以能够保持所有的顺序一致
15         setTemp= sensorDataBytes.getKeySet() ;
16         for(String n:setTemp){
17             treeMap.put(n, 0);
18         }
19     }
20     
21     /**
22      * 供测试用,打印传感器数据的map;
23      */
24     public void printMap(){
25         System.out.println(treeMap);
26     }
27     
28     /**
29      * 获得name 传感器的数值
30      * @param name  表示传感器名称
31      * @return   传感器数值
32      */
33     public int getSensorData(String name){
34         return treeMap.get(name);
35     }
36     
37     /**
38      * 获得传送过来的id
39      * @return  传送过来的老人的id
40      */
41     public String getId(){
42         return String.valueOf(id);
43     }
44     
45     /**
46      *   将整个request 的流全部解析出来。
47      * @param request  传入的HttpServletRequest 参数
48      * @throws IOException
49      */
50     public void runResult(InputStream request) throws IOException {
51         readByteArray(request);
52         readId(StaticFinalVariable.ID_BYTES);
53         outDataFrombyteArr(StaticFinalVariable.ID_BYTES);
54     }

 

使用示例:

服务器servlet:

View Code
 1 /**
 2      * 转换类 接受从发送端来的,将其解析之用
 3      */
 4     private DataTransOut trans=new DataTransOut(StaticFinalVariable.BYTE_STORY_XML_NAME_S,false);
 5     
 6     /**
 7      * 从服务器传到客户接收端,只是示例
 8      */
 9     private DataTransIn transIn= new DataTransIn(StaticFinalVariable.BYTE_TO_CLIENT_XML_NAME_S, false);
10     
11     /**
12      * 传送信息
13      */
14     private String msg=null;
15     
16     //我是用接受端用httpGet 所以这个doGet 是用来接收端的。
17     public void doGet(HttpServletRequest request, HttpServletResponse response)
18             throws ServletException, IOException {
19         DataTransIn transIn=new DataTransIn(StaticFinalVariable.BYTE_TO_CLIENT_XML_NAME_S, false);
20 
21         TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>();
22         System.out.println("doget");
23         treeMap.put("hello", 1);
24         treeMap.put("acceleration1",100);
25         treeMap.put("temperature",2000);
26         treeMap.put("acceleration2", 10000);
27         treeMap.put("acceleration3",65535 );
28         try {
29             transIn.setDateToRes(treeMap,"0", false, response);
30         } catch (DigitException e) {
31             // TODO Auto-generated catch block
32             e.printStackTrace();
33         }
34     }
35     
36     //这个是用来发送端的示例的,发送短时用HttpPost
37     public void doPost(HttpServletRequest request, HttpServletResponse response)
38             throws ServletException, IOException {
39         response.setContentType("text/html");
40         response.setCharacterEncoding("utf-8");
41         PrintWriter out = response.getWriter(); 
42         
43         trans.runResult(request.getInputStream());
44         trans.printMap();
45         System.out.println(trans.getId());
46         trans.getSensorData("acceleration1");
47         
48         outputMap();
49         String msg ="hello";
50         out.print(msg);
51         out.flush();
52         out.close();
53     }

发送端:

View Code
 1 public class MainActivity extends Activity {
 2     private  Button button3;
 3     private DataTransIn trans = new DataTransIn(StaticFinalVariable.BYTE_STORY_XML_NAME_C,true);
 4     
 5     private String id="0";
 6     @Override
 7     public void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10         button3 = (Button) findViewById(R.id.button3);
11 
12         button3.setOnClickListener(new View.OnClickListener() {
13             
14             @Override
15             public void onClick(View v) {
16                 // TODO Auto-generated method stub
17                 TreeMap<String, Integer> treeMap =new TreeMap<String, Integer> ();
18                 treeMap.put("hello", 1);
19                 treeMap.put("acceleration1",100);
20                 treeMap.put("temperature",2000);
21                 treeMap.put("acceleration2", 10000);
22                 treeMap.put("acceleration3",65535 );
23                 try {
24                     Log.e("treeMap:",treeMap+"");
25                     if(trans.syncDataToServer(treeMap,id,true,"http://125.216.245.218"+StaticFinalVariable.URL_Str)){
26                         toastShow("发送成功");
27                     }
28                     else{
29                         toastShow("发送失败");
30                     }
31                 } catch (DigitException e) {
32                     // TODO Auto-generated catch block
33                     Toast.makeText(MainActivity.this,e.getMessage(), Toast.LENGTH_SHORT);
34                     
35                     e.printStackTrace();
36                 }
37                 Log.e("error", "testEntity after test");
38             }
39         });
40     }
41     private void toastShow(String msg){
42         Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
43     }
44 }

接收端Service:

View Code
 1 public class MainService extends Service {
 2 
 3     
 4     @Override
 5     public IBinder onBind(Intent arg0) {
 6         // TODO Auto-generated method stub
 7         return null;
 8     }
 9     
10     @Override
11     public int onStartCommand(Intent intent, int flags, int startId) {
12         // TODO Auto-generated method stub
13         syncMsg();
14         return super.onStartCommand(intent, flags, startId);
15     }
16     private void syncMsg(){
17         HttpGet get = new HttpGet("http://"+"125.216.245.218"+StaticFinalVariable.URL_Str);
18         
19         try {
20         
21             HttpResponse response = new DefaultHttpClient().execute(get);
22             Log.e("error","response ok");
23             if(response.getStatusLine().getStatusCode()==200){
24 
25 //                DataInputStream dataInputStream=new DataInputStream(response.getEntity().getContent());
26 //                String msg=dataInputStream.readLine();
27                 HttpEntity httpEntity= response.getEntity();
28                 dataTransOut.runResult(httpEntity.getContent());
29 //                dataTransOut.runResult(dataInputStream);
30 
31                 Log.e("error",dataTransOut.getSensorData("hello")+"");
32                 Log.e("error",response.getStatusLine()+"");
33 //                Log.e("error",msg);                
34             }
35         } catch (Exception e) {
36             e.printStackTrace();
37         }
38     }
39 }

另外有一个保证服务器和两个客户端的sensor_byte.xml 文件范例:

View Code
1 <?xml version="1.0" encoding="UTF-8"?>
2 <sensor_bytes>
3     <hello>1</hello>
4     <acceleration1>2</acceleration1>
5     <temperature>2</temperature>
6     <acceleration2>2</acceleration2>
7     <acceleration3>2</acceleration3>
8 </sensor_bytes>

下面是我所有的文档的打包。记得把android.rar 放在服务器的lib下

 

https://files.cnblogs.com/b3347/TryHttpSoap.rar

https://files.cnblogs.com/b3347/Receiver.rar

https://files.cnblogs.com/b3347/HelloWeb.rar

posted on 2012-07-22 12:56  TeamWork  阅读(238)  评论(2编辑  收藏  举报