Java与C交互
2016-06-28 12:00
295 查看
/** * Java与C交互 * @param param 上送信息 * @return 返回信息 */ public static Map<String, String> infExchange(Object param){ Map<String, String> returnMsg = null; Socket socket = null; DataOutputStream outputStream = null; DataInputStream inputStream = null; String host = null; int port = 0; try{ //读取地址及端口号 host = Global.getConfig("socket.host"); port = Integer.valueOf(Global.getConfig("socket.port")); //创建socket socket = new Socket(host, port); socket.setSoTimeout(20000);//超时时间设置为20s //对象转化为json ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(param); //前加4位长度 String sendMsg = StringUtils.padLeft(String.valueOf(json.getBytes("GBK").length), '0', 4) + json; System.out.println("上送报文:" + sendMsg); //上送 outputStream = new DataOutputStream(socket.getOutputStream()); outputStream.write(sendMsg.getBytes("GBK")); outputStream.flush(); //接收返回 inputStream = new DataInputStream(socket.getInputStream()); byte[] b = new byte[4]; int count = 1;//只读取两次,第一次读取报文长度,第二次读取完整报文 while(inputStream.read(b)!=-1){ if(count==1){ int len = Integer.valueOf(new String(b)); b = new byte[len]; count++; Thread.sleep(200); }else{ break; } } String response = new String(b, "GBK"); System.out.println("返回报文:" + response); //将返回json转化为map格式 if(response!=null && !"".equals(response)){ returnMsg = mapper.readValue(response, Map.class); } }catch(Exception e){ e.printStackTrace(); }finally{ //关闭流 try { inputStream.close(); outputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } return returnMsg; }
相关文章推荐
- Java NIO FileChannel
- spring中在service中控制事务简单备注
- Java 权限框架 Shiro 实战二:与spring集成、filter机制,shirofilter
- 使用Eclipse开发java web环境搭建
- spring中autowire的用法
- java1对属性的理解
- spring boot 学习笔记(001) 新建Eclipse工程
- 使用Maven配置Struts2 集成Spring
- eclipse下载
- Java 探针:Java SE 6 提供的 Attach API
- MyBatis入门第2天--MyBatis基础知识(二)
- java.text.Format及相关类详解
- java中的类修饰符、成员变量修饰符、方法修饰符
- Spring Data JPA 快速入门
- 64位win7环境eclipse集成svn后出现Failed to load JavaHL Library的解决办法
- eclipse *.vm 文件,语法高亮
- html传到后台的中文乱码(后台为java)
- java虚拟机收集器之老年代收集器
- leetcode-java-137. Single Number II
- 取消eclipse js验证