Java使用TCP协议获取XML及其处理【续】
2013-05-20 14:32
309 查看
上一篇文章《Java使用TCP协议获取XML及其处理》(见:/article/2104611.html)中,介绍了用Java模拟Socket服务器端,与客户端进行TCP通讯的例子。今天在现场中,客户使用C#***的服务器端,与我们Java的客户端通讯出现了一个小问题,就是双方发送的XML信息出现乱码现象,客户端向服务器发送的请求信息头出现“/0”等乱字符,服务器端响应给客户端的XML中的中文出现乱码。我们考虑应该是编码不一致造成的问题,统一采用UTF-8编码。所以对上一篇文章中的代码进行了修正。
protected void onBoReadNoTest() throws Exception { Socket soc = null; String data = ""; InetAddress addr = InetAddress.getByName("127.0.0.1"); int serverPort = 1111; if (addr.isReachable(5000)) { System.out.println("SUCCESS - ping " + addr + " with no interface specified"); try { soc = new Socket(addr, serverPort); System.out.println("Socket Success!"); DataInputStream in = new DataInputStream(soc.getInputStream()); DataOutputStream out=new DataOutputStream(soc.getOutputStream()); String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><cmd>ReadWeight</cmd>"; byte[] b = str.getBytes(); out.write(b); byte[] b2 = new byte[1024]; int count = in.read(b2, 0, b2.length); data = new String(b2,0,count,"UTF-8"); this.DOM(data); } catch (UnknownHostException e) { System.out.println("Socket Error:" + e.getMessage()); } catch (EOFException e) { System.out.println("EOF:" + e.getMessage()); } catch (IOException e) { System.out.println("IO:" + e.getMessage()); } finally { if (soc != null) try { soc.close(); } catch (IOException e) {/* close failed */ } } } else { System.out.println("FAILURE - ping " + addr + " with no interface specified"); } }DOM解析如下:
// DOM解析方法 public void DOM(String data) { long lasting = System.currentTimeMillis(); System.out.println("解析XML开始..........."); try { byte[] b = data.getBytes("UTF-8"); InputStream inp = new ByteArrayInputStream(b); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(inp); NodeList nl = doc.getElementsByTagName("result"); WeightVO wvo = new WeightVO(); for (int i = 0; i < nl.getLength(); i++) { wvo.setCode(doc.getElementsByTagName("code").item(i).getFirstChild() == null ?null:doc.getElementsByTagName("code").item(i).getFirstChild().getNodeValue()); wvo.setWeight(doc.getElementsByTagName("weight").item(i).getFirstChild()==null? null:doc.getElementsByTagName("weight").item(i).getFirstChild().getNodeValue()); wvo.setErrmsg(doc.getElementsByTagName("errmsg").item(i).getFirstChild() == null ? null : doc.getElementsByTagName("errmsg").item(i).getFirstChild().getNodeValue()); wvo.setUtil(doc.getElementsByTagName("unit").item(i).getFirstChild()==null?null:doc.getElementsByTagName("unit").item(i).getFirstChild().getNodeValue()); } getBillCardPanelWrapper().getBillCardPanel().getHeadItem("nweight").setValue(wvo.getWeight()); } catch (Exception e) { e.printStackTrace(); } // System.out.println("DOM RUNTIME 解析时间:" // + (System.currentTimeMillis() - lasting) + " MS"); }本文由小李专栏原创,转载请注明【转自/article/2104612.html】
相关文章推荐
- Java使用TCP协议获取XML及其处理
- Java使用TCP协议获取XML及其处理【续】
- java 解析xml是使用dom4j空行以及中文乱码的处理
- 在Java中使用Jedis操作Redis,在高并发的情况下,应用卡死、报无法获取连接错误的处理方式
- 使用Java处理XML数据
- java通过url获取页面数据 java解析xml 基金净值接口使用方法
- 使用JAXB处理JAVA和XML
- Java中的异常处理用法及其架构和使用建议
- JSP中使用XMLHttpRequest动态无刷新及其中文乱码处理
- java 在dom4j中,使用XPath处理XML(主要对命名空间的处理)
- 使用Java jaxb处理bean生成xml中一些问题
- JAVA使用AXMLPrinter获取APK中Androidmanifest.xml信息
- 使用java处理XML
- 使用java获取kettle上个步骤的数据并处理输出到下步骤
- Java如何把链接中的参数在页面使用参数名字获取ModelMap model去页面显示或者处理
- java 使用tcp协议发送json串获取服务器返回的json
- 如何使用Google APIs和Google应用系统集成(7)----在里面JSON兑换XML数据处理,JSON数据包括违规XML数据规范:XML节点名称不支持号码Java解
- Java&Xml教程(十)XML作为属性文件使用
- List<Map<String,Object>>使用Java代码遍历以获取String,Object的值
- jQuery form插件的使用之处理server返回的JSON, XML,HTML数据