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