`

java socket编程

    博客分类:
  • java
阅读更多
引用
/** * 工行实名认证处理方法 * * @param buff * @return */ public String icbcRealname(Buffer buff) { try { /**拼装报文信息**/ log.info("#############拼装上送工行实名认证报文信息###############"); String strMessage = appendMessage(buff); if(strMessage.length() == 0){ log.info("#############拼装上送工行实名认证报文为空"); throw new Exception("实名认证不通过"); } /**获取IP端口号超时时间**/ String[] info = getMerchantInfo(buff.getMchntId()); String hostName = info[0]; int portNum = Integer.parseInt(info[1]); int delaySecond= Integer.parseInt(info[2]);//接收返回报文延时60s log.info("#############获取IP端口号超时时间:"+hostName+"#"+portNum+"#"+delaySecond); /**通过socket发送报文**/ Socket socket = null; try { socket = new Socket(hostName, portNum); if (socket == null) { // 未能得到指定的Socket对象,Socket通讯为空 log.error("##########################Socket通讯为空!"); throw new Exception("实名认证不通过"); } log.info("#############---->发送报文="+strMessage); OutputStream os=socket.getOutputStream(); os.write(strMessage.toString().getBytes("GBK")); os.flush(); BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream(),"GBK")); long sendTime = System.currentTimeMillis(); long receiveTime = System.currentTimeMillis(); String serverMessage = ""; serverMessage = in.readLine(); log.info("#############---->返回报文:"+serverMessage); receiveTime = System.currentTimeMillis(); if (serverMessage == null || (receiveTime - sendTime) > delaySecond){ // 字符串不为空,接收成功 log.error("##########################---->连接超时"); throw new Exception("实名认证不通过"); } in.close(); os.close(); socket.close(); /**对从工行接收到的报文进行截取返回码,返回信息**/ String rspCode = serverMessage.substring(4, serverMessage.indexOf("|")); String rspDesc = serverMessage.split("\\|")[1]; buff.setRspCd(rspCode); buff.setRespDesc(rspDesc); log.info("##########################---->buff.getRspCd:"+rspCode); log.info("##########################---->buff.getRespDesc:"+rspDesc); if (ErrCodeConversion.getRspToExtCode(buff.getRspCd()).equals( ServerRspCode.SUCCESS)) { buff.setTransStep(ServerConstants.TRANS_STEP_INITIAL); buff.setTransSt(ServerConstants.TRANSST_SUCCESS); buff.setTxnSysDt(ServerCommFunction.getCurrDate()); } else { log.error("###############RspCd:"+buff.getRspCd(), "实名认证不通过!"); buff.setIntRspCd(ErrCodeConversion.getRspToExtCode(buff .getRspCd())); buff.setRspCd(ErrCodeConversion.getRspToExtCode(buff .getIntRspCd())); buff.setRespDesc(ServerCommFunction.getUserRespDesc(buff, buff.getRspCd())); return ServerRspCode.SEND_REALNAME_AUTH_ERR; } } catch (UnknownHostException e) { log.error("#############---->出现未知主机错误。主机信息="+hostName+";端口号="+portNum); throw new Exception("实名认证不通过"); } catch (IOException e) { log.error("#############---->出现IO异常"); e.printStackTrace(); throw new Exception("实名认证不通过"); } catch (Exception e) { log.error("#############---->出现未知异常" + e.getMessage()); throw new Exception("实名认证不通过"); } finally { socket = null; } } catch (Exception e) { log.error(ServerRspCode.SEND_REALNAME_AUTH_ERR, "实名认证不通过!", null, e); buff.setIntRspCd(ServerRspCode.SEND_REALNAME_AUTH_ERR); buff.setRspCd(ErrCodeConversion .getRspToExtCode(ServerRspCode.SEND_REALNAME_AUTH_ERR)); buff.setRespDesc(ServerCommFunction.getUserRespDesc(buff, buff .getRspCd())); return ServerRspCode.SEND_REALNAME_AUTH_ERR; } return ServerRspCode.SUCCESS; } /** * 建行实名拼接报文 * @param buff * @return */ private String appendMessage(Buffer buff){ StringBuffer strMessage = new StringBuffer(); String len = ""; try { //个人:报文体长度(4位不足前补零)+交易码(01)|账号|姓名|身份证号码|; if(buff.getCustType().equals(ServerConstants.REALNAME_MER_PRI)){ strMessage.append(ServerConstants.REALNAME_ICBC_PRI); strMessage.append(buff.getBankAcc()).append("|"); strMessage.append(buff.getCustomerNm()).append("|"); strMessage.append(buff.getIdNo()).append("|"); len = String.valueOf(strMessage.toString().getBytes("GBK").length-ServerConstants.REALNAME_ICBC_PUB.length()); while (len.length()<4) { len = "0"+len; } strMessage.insert(0,len); } //对公:报文体长度(4位不足前补零)+交易码(03)|账号|户名|组织机构代码|; if(buff.getCustType().equals(ServerConstants.REALNAME_MER_PUB)){ strMessage.append(ServerConstants.REALNAME_ICBC_PUB); strMessage.append(buff.getBankAcc()).append("|"); strMessage.append(buff.getCustomerNm()).append("|"); strMessage.append(buff.getOrgCode()).append("|"); len = String.valueOf(strMessage.toString().getBytes("GBK").length-ServerConstants.REALNAME_ICBC_PUB.length()); while (len.length()<4) { len = "0"+len; } strMessage.insert(0,len); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return strMessage.toString(); }
分享到:
评论

相关推荐

    Java socket编程实现两台主机间的通信

    Java Socket 编程实现两台主机间的通信 Java Socket 编程是 Java 语言中用于实现网络通信的编程技术。通过使用 Socket 编程,可以实现两台主机之间的通信,实现数据的传输和交换。本文将详细介绍 Java Socket 编程...

    java socket 编程

    java socket编程 java网络编程 课件 java socket编程 java网络编程 课件

    JAVA Socket编程实现文件上传

    Java Socket编程是网络编程的基础,它提供了在两个应用程序之间建立通信连接的能力。在这个场景中,我们讨论的是如何使用Java的Socket来实现文件上传功能,即从客户端将文件发送到服务器,然后保存到服务器的数据库...

    java socket 编程,Java socket 编程实例

    ### Java Socket编程详解及实例分析 #### 一、Socket编程基础概述 在计算机网络通信领域,Socket编程是一种广泛使用的通信方式。它为不同主机上的进程提供了双向通信的能力,是网络编程的基础之一。Java语言提供了...

    Java Socket 编程html教程

    Java Socket编程是Java网络编程的重要组成部分,主要用于实现客户端与服务器之间的通信。在本文中,我们将深入探讨Java Socket编程的基础知识,以及如何结合HTML进行交互。 首先,Java Socket是TCP/IP协议族的一...

    Java Socket 编程源代码示例

    import java.io.*; import java.net.*; import java.util.*; import java.lang.*; public class Server extends ServerSocket { private static ArrayList User_List = new ArrayList(); private static ...

    java socket 编程文档

    本文将深入探讨Java Socket编程的基础知识、关键概念以及如何在实践中应用。 一、Socket概述 Socket,也被称为套接字,是网络通信的端点,可以理解为两个应用程序之间的连接通道。在Java中,Socket类(java.net....

    华科-计算机网络实验报告-Java Socket编程-网络组建实验.docx

    Java Socket 编程在计算机网络实验中的应用 Java Socket 编程是计算机网络实验中的一个重要组成部分,它允许开发者创建可以在网络上传输数据的应用程序。下面是关于 Java Socket 编程在计算机网络实验中的应用的...

    总结java_socket编程.doc

    在Java中,Socket编程主要是基于TCP/IP协议的网络编程。 网络编程的两个主要问题 在网络编程中,有两个主要的问题需要解决:一是如何准确地定位网络上的一台或多台主机,二是找到主机后如何可靠高效地进行数据传输...

    Java Socket编程:文件传输.doc

    Java Socket 编程:文件传输 Java Socket 编程是 Java 语言中的一种网络编程技术,用于实现客户端和服务器端之间的数据传输。文件传输是 Java Socket 编程中的一种常见应用场景,通过建立客户端和服务器端之间的...

    Java socket编程实例.pdf

    本文将通过一个具体的Java Socket编程实例来深入探讨如何使用Java实现客户端与服务端之间的通信。 #### 二、基础知识概述 在开始具体实例之前,我们需要了解一些基本概念: - **Socket**:Socket是一种用于在网络...

    java Socket 编程源码

    Java Socket编程是网络编程的基础,它提供了在Java中进行低级网络通信的接口。Socket是TCP/IP协议族的一部分,用于实现客户端与服务器之间的双向通信。在这个"java TCP_IP Socket 编程"源码中,我们可以深入理解...

    java socket编程实例(出自《java大学教程》)

    学习这些Java Socket编程实例,有助于理解TCP/IP通信的基本原理,为构建实际的网络应用程序打下坚实的基础。你可以通过调试和修改`SocketTest`代码,进一步探索和实践Socket编程的不同场景,如文件传输、聊天应用等...

    浅出Java Socket编程

    Java Socket编程是网络编程的基础,它是Java平台中用于实现客户端-服务器通信的关键组件。本教程将深入浅出地探讨Java Socket编程的核心概念和技术,帮助开发者理解如何构建可靠的网络应用程序。 一、Socket概述 ...

    Java Socket编程笔记_动力节点Java学院整理

    异常处理在Java Socket编程中扮演着重要角色。主要涉及四种异常类型: 1. `UnknownHostException`: 表示主机名或IP地址无法解析,通常是因为网络不可达或者主机名不存在。 2. `ConnectException`: 当尝试连接到...

    Java Socket编程.pdf

    Java Socket编程是网络编程的一个重要部分,它允许在网络中的计算机之间进行数据交换。Socket编程是基于TCP/IP协议的,因此了解计算机网络、分组报文和协议对于掌握Socket编程来说至关重要。接下来,我将详细解释...

    Java Socket网络编程.pdf

    在Java中,Socket编程主要涉及两个关键类:`ServerSocket`和`Socket`。`ServerSocket`类用于服务器端,它监听指定端口的连接请求。创建一个`ServerSocket`实例,例如`ServerSocket server = new ServerSocket(9998);...

    三步学会Java_Socket编程

    在Java中,Socket编程是实现网络通信的基础,它提供了进程间通信的能力,使得两个相隔万里的计算机可以通过互联网进行数据交换。本篇文章将深入讲解如何通过三步学习Java Socket编程。 **第一步:理解Socket** ...

    JAVA Socket 经典教程

    本教程将深入探讨Java Socket编程的核心概念,以及如何利用它进行网络通信。 1. **Java Socket基础** - **Socket的概念**:Socket是网络通信中的一个端点,可以理解为两台机器间通信的桥梁。在Java中,Socket类...

Global site tag (gtag.js) - Google Analytics