Java使用TCP协议获取XML及其处理【续】

来源:互联网 发布:女生学什么舞蹈知乎 编辑:程序博客网 时间:2024/06/06 01:41

  上一篇文章《Java使用TCP协议获取XML及其处理》(见:http://blog.csdn.net/softwave/article/details/8947771)中,介绍了用Java模拟Socket服务器端,与客户端进行TCP通讯的例子。今天在现场中,客户使用C#制作的服务器端,与我们Java的客户端通讯出现了一个小问题,就是双方发送的XML信息出现乱码现象,客户端向服务器发送的请求信息头出现“/0”等乱字符,服务器端响应给客户端的XML中的中文出现乱码。我们考虑应该是编码不一致造成的问题,统一采用UTF-8编码。所以对上一篇文章中的代码进行了修正。  上一篇文章《Java使用TCP协议获取XML及其处理》


  1. protected void onBoReadNoTest() throws Exception {  
  2.         Socket soc = null;  
  3.         String data = "";  
  4.         InetAddress addr = InetAddress.getByName("127.0.0.1");  
  5.         int serverPort = 1111;  
  6.         if (addr.isReachable(5000)) {  
  7.             System.out.println("SUCCESS - ping " + addr  
  8.                     + " with no interface specified");  
  9.             try {  
  10.                 soc = new Socket(addr, serverPort);  
  11.                 System.out.println("Socket Success!");  
  12.                 DataInputStream in = new DataInputStream(soc.getInputStream());  
  13.                 DataOutputStream out=new DataOutputStream(soc.getOutputStream());  
  14.                 String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><cmd>ReadWeight</cmd>";  
  15.                 byte[] b = str.getBytes();  
  16.                 out.write(b);  
  17.                 byte[] b2 = new byte[1024];  
  18.                 int count = in.read(b2, 0, b2.length);  
  19.                 data = new String(b2,0,count,"UTF-8");  
  20.                 this.DOM(data);  
  21.             } catch (UnknownHostException e) {  
  22.                 System.out.println("Socket Error:" + e.getMessage());  
  23.             } catch (EOFException e) {  
  24.                 System.out.println("EOF:" + e.getMessage());  
  25.             } catch (IOException e) {  
  26.                 System.out.println("IO:" + e.getMessage());  
  27.             } finally {  
  28.                 if (soc != null)  
  29.                     try {  
  30.                         soc.close();  
  31.                     } catch (IOException e) {/* close failed */  
  32.                     }  
  33.             }  
  34.         } else {  
  35.             System.out.println("FAILURE - ping " + addr  
  36.                     + " with no interface specified");  
  37.         }  
  38.   
  39.     }  


DOM解析如下:



  1. //  DOM解析方法  
  2.     public void DOM(String data) {    
  3.         long lasting = System.currentTimeMillis();    
  4.         System.out.println("解析XML开始...........");  
  5.         try {    
  6.             byte[] b = data.getBytes("UTF-8");  
  7.             InputStream inp = new ByteArrayInputStream(b);  
  8.             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();    
  9.             DocumentBuilder builder = factory.newDocumentBuilder();    
  10.             Document doc = builder.parse(inp);    
  11.             NodeList nl = doc.getElementsByTagName("result");   
  12.             WeightVO wvo = new WeightVO();    
  13.             for (int i = 0; i < nl.getLength(); i++) {    
  14.                 wvo.setCode(doc.getElementsByTagName("code").item(i).getFirstChild() == null ?null:doc.getElementsByTagName("code").item(i).getFirstChild().getNodeValue());    
  15.                 wvo.setWeight(doc.getElementsByTagName("weight").item(i).getFirstChild()==nullnull:doc.getElementsByTagName("weight").item(i).getFirstChild().getNodeValue());    
  16.                 wvo.setErrmsg(doc.getElementsByTagName("errmsg").item(i).getFirstChild() == null ? null : doc.getElementsByTagName("errmsg").item(i).getFirstChild().getNodeValue());    
  17.                 wvo.setUtil(doc.getElementsByTagName("unit").item(i).getFirstChild()==null?null:doc.getElementsByTagName("unit").item(i).getFirstChild().getNodeValue());    
  18.             }    
  19.             getBillCardPanelWrapper().getBillCardPanel().getHeadItem("nweight").setValue(wvo.getWeight());  
  20.         } catch (Exception e) {    
  21.             e.printStackTrace();    
  22.         }    
  23.          
  24. //        System.out.println("DOM RUNTIME 解析时间:"    
  25. //                + (System.currentTimeMillis() - lasting) + " MS");    
  26.     }    



本文由小李专栏原创,转载请注明【转自http://blog.csdn.net/softwave/article/details/8950299