socket请求银行
来源:互联网 发布:sql server 月份差 编辑:程序博客网 时间:2024/06/05 18:29
Socket client = null;
PrintWriter printWriter = null;
try {
// 向服务器端发送请求,服务器IP地址和服务器监听的端口号
client = new Socket(ip, 8008);
// 通过printWriter 来向服务器发送消息
printWriter = new PrintWriter(
new OutputStreamWriter(client.getOutputStream(),"GB2312"), false);
// 查询余额(请求xml)
String requestXml = "xhj0004#"+acctNo+"#@@@@";
if (logger.isInfoEnabled()) {
logger.info("请求报文:" + requestXml);
}
printWriter.println(requestXml);
printWriter.flush();
// 解析服务器返回的报文
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int count = -1;
while ((count = client.getInputStream().read(data, 0, 1024)) != -1)
outStream.write(data, 0, count);
data = null;
String returnXml = new String(outStream.toByteArray(),"GB2312");
if (logger.isInfoEnabled()) {
logger.info("华银企直联查询余额,响应报文:" + returnXml);
}
if (StringUtils.isBlank(returnXml)) {
logger.error("银企直联查询余额请求前置机通讯失败!返回报文为空");
return super.builFalidQueryResponse(req,"银企直联查询余额请求前置机通讯失败,返回报文为空",
ReturnCode.FAILED, ReturnCode.FAILED, StringUtil.EMPTY_STRING);
}
if(!returnXml.startsWith("000000") || !returnXml.contains("#")){
logger.error("银企直联查询余额返回报文异常");
return super.builFalidQueryResponse(req,"银企直联查询余额返回报文异常", ReturnCode.FAILED,
ReturnCode.FAILED, "银企直联查询余额返回报文异常");
}
String returnData[] = returnXml.split("#");
if(returnData.length < 6){
logger.error("银企直联查询余额返回报文异常");
return super.builFalidQueryResponse(req,"银企直联查询余额返回报文异常", ReturnCode.FAILED,
ReturnCode.FAILED, "银企直联查询余额返回报文异常");
}
String respCode = returnData[0];
String blanceAmt = returnData[3];
// 解析数据
if (blanceAmt != null && StringUtils.isNotBlank(blanceAmt)) {
if (logger.isInfoEnabled()) {
logger.info("银企直联查询余额成功,余额:"+blanceAmt+"元");
}
//余额不足告警log
if (Double.parseDouble(blanceAmt) < Double.parseDouble(balabceAmt)) {
logger.error("银企直联余额查询不足告警:余额" + blanceAmt +",小于告警金额"
+ balabceAmt +"元");
}
if (blanceAmt == "0.00") {
logger.error("银企直联余额查询返回余额不足,余额为0.00");
return builFalidQueryResponse(req,"银企直联余额查询返回余额不足", ReturnCode.FAILED,
ReturnCode.FAILED, "银企直联余额查询返回余额不足");
}
return super.buildQueryResult(req.getInstOrderNo(), blanceAmt,
"0000", "查询成功");
}
if (logger.isInfoEnabled()) {
logger.info("银企直联查询余额失败");
}
return builFalidQueryResponse(req,"银企直联余额查询失败" + "查询失败", ReturnCode.FAILED, respCode,
"查询失败");
} catch (Exception e) {
logger.error("银企直联余额查询异常:" + e);
return builFalidQueryResponse(req,"银企直联余额查询异常", ReturnCode.FAILED, ReturnCode.FAILED,
StringUtil.EMPTY_STRING);
} finally {
try {
close(printWriter, client);
} catch (IOException e) {
logger.error("银企直联余额查询关闭IO异常", e);
}
}
}
/**
* 关闭资源
*
* @param printWriter
* @param client
* @throws IOException
*/
private static void close(PrintWriter printWriter, Socket client) throws IOException {
IOUtils.closeQuietly(printWriter);
client.close();
}
- socket请求银行
- Socket请求
- socket请求
- socket 发送http请求
- Flex socket 安全策略请求
- socket 请求测试
- 多线程处理socket请求
- socket发送http请求
- Socket模拟GET请求
- Flex socket 安全策略 请求
- socket模拟http请求
- socket发送请求
- java写socket请求
- PHP Socket请求类
- socket模拟http请求
- socket请求接受
- socket模拟http请求
- socket 发送http请求
- Ios开发,图片上传
- 利用内存映射文件处理大文件
- iOS 对数字小数进行进位和舍去的处理
- redis
- 当自己写http服务的时候,路由是很重要的,我这里分享我在路由使用的时候是如何注册的
- socket请求银行
- LeetCode 144. Binary Tree Preorder Traversal 解题报告
- 关于Layer的问题
- jquery和js 学习(推荐比较好的网站)
- RabbitMQ的几种典型使用场景
- 身份证号码归属地数据库 身份证具体信息查询服务
- 指针和二维数组
- C++运算符重载和模板
- 蓝桥杯 操作格子 (线段树)