socket短连接,数据交互报文采用XML形式

2023-10-30

 socket 服务端一直等待客户端

  public void threadServer() {
        // TODO Auto-generated method stub
        class ServerThread extends Thread {
            Socket socket = null;

            public ServerThread(Socket socket) {
                this.socket = socket;
            }

            public void run() {
                InputStream inputStream = null;
                OutputStream outputStream = null;
                try {
                    // 4.获取输入流,并读取服务器端的响应信息
                    inputStream = socket.getInputStream();
                    //封装数据写给服务器端
                    outputStream = socket.getOutputStream();
                    //  创建文件输出流,方便从socket读取的数据写入文件
                    byte[] buf = new byte[1024];
                    int readb = 0;
                    while ((readb = inputStream.read(buf)) != -1) {
                        String str = new String(buf, 0, readb, "GBK");
                        System.out.println("接收数据:" + str);
                        // 数据处理
                           String result = "测试";
                        // 转换编码方式
                        byte[] b = result.getBytes("GBK");
                        long len = b.length;
                        String length = String.format("%05d", len);
                        result = length + result;
                        byte[] bt = result.getBytes("GBK");
                        System.out.println("写入数据:" + result);
                        //写数据
                        outputStream.write(bt);
                        outputStream.flush();
                    }
                    System.out.println("服务器端接受完毕!");
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        inputStream.close();
                        outputStream.close();
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        try {
            //1.创建服务器端ServerSocket对象,指定端口
            ServerSocket serverSocket = new ServerSocket(SysConstant.serverPort);
            Socket socket = null;
            System.out.println("服务器等待客户端的连接");
            //2.调用accept()监听(即等待客户端的连接)
            while (true) {
                socket = serverSocket.accept();
                //创建一个新线程
                ServerThread serverThread = new ServerThread(socket);
                serverThread.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Document 创建xml报文

   /**
     * 返回公共报文
     *
     * @return
     */
    public static String createElement(JSONObject obj) {
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            //设置编码格式
            transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
            
            // 创建解析工厂
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder = factory.newDocumentBuilder();
            Document document = documentBuilder.newDocument();
            document.setXmlStandalone(true);
            Element parent = document.createElement("ONEKEY");
            document.appendChild(parent);
            Element HEAD = document.createElement("HEAD");
            parent.appendChild(HEAD);
            // 返回代码
            Element RESULT_CODE = document.createElement("RESULT_CODE");
            RESULT_CODE.setTextContent("ok");
            // 返回信息
            Element RESULT_MSG = document.createElement("RESULT_MSG");
            RESULT_MSG.setTextContent("内容");
          
            HEAD.appendChild(RESULT_CODE);
            HEAD.appendChild(RESULT_MSG);
            DOMSource source = new DOMSource(document);
            transformer.transform(source, new StreamResult(bos));
            String result = bos.toString("GBK");
            return result ;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

 因公司需求与中行对接写的记录一下

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

socket短连接,数据交互报文采用XML形式 的相关文章

  • while循环内的递归,它是如何工作的?

    你能告诉我这段java代码是如何工作的吗 public class Main public static void main String args Strangemethod 5 public static void Strangemet
  • 如何判断手机是否有刘海

    如果存在缺口 我需要修改应用程序的工具栏 现在 该凹口隐藏了工具栏中的一些内容 if Build VERSION SDK INT Build VERSION CODES LOLLIPOP Build VERSION SDK INT Buil
  • 无法获取未知属性“运行时”Gradle 7.0

    我最近切换到 gradle 7 0 现在无法构建我的项目 jar 并出现错误 无法获取 org gradle api internal artifacts configurations DefaultConfigurationContain
  • 如何使用 hibernate 过滤器过滤 hibernate 中的实体

    我需要过滤对象列表中的实体 例如 public class Student private int id private List
  • 如何将选定的项目移动到列表顶部

    List
  • Hazelcast Jet 变更数据捕获

    我在我的应用程序中使用 Hazelcast 更改数据捕获 CDC 我使用 CDC 的原因是 如果使用 jdbc 或其他替代功能将数据加载到缓存中 会花费大量时间 所以CDC将在数据库和 Hazelcast Jet 之间进行数据同步 Stre
  • Java GUI,根据actionListener更改面板

    我在两个不同的面板中添加了两个按钮 如果单击第一个按钮 则需要转到下一个面板 其中包含第二个按钮 但是当我单击第一个按钮时 该按钮没有被替换 Java GUI import java awt event ActionEvent import
  • 椭圆与椭圆如何相交?

    我用的是JAVA Ellipse2D s1 new Ellipse2D Float 0 0 100 100 System out println s1 intersects 99 30 100 100 应该返回 false 但它返回 tru
  • 如何跨工作区保存 E​​clipse 启动配置文件?

    当我复制 Eclipse 项目目录时 它包含 classpath 和 project 文件 这样当我将同一目录带到另一个 Eclipse 实例时 我不必设置我的构建路径等 假设所有资源都包含在在项目中 而不是外部 但是 此过程不会导致启动配
  • 在 Postman 中解析对另一个请求的 XML 响应

    我必须测试一些以 XML 格式响应的 Web 服务 并且我想解析从第一个请求到第二个请求调用的响应 Ex 我提出第一个请求
  • Java 会话变量

    我听说有些人认为在会话中将信息存储在服务器上是一个坏主意 因为它不安全 因此 在多页面业务流程功能中 应用程序将数据写入数据库 然后在需要时检索信息 在会话中存储私人信息是否一定不安全 只要会话本身安全 在会话中存储属性就不存在安全风险劫持
  • 在 Scala 中创建 Java 对象

    我有一个 Java 类 Listings 我在 Java MapReduce 作业中使用它 如下所示 public void map Object key Text value Context context throws IOExcept
  • 如何更改使用 Google ReCaptcha 版本 2 时的错误消息?

    当为 Google ReCaptcha 版本 2 选择多张照片时 会显示以下错误消息 需要多个正确的解决方案 请解决更多 如何将错误消息更改为我网站上的自定义消息 这是图像 我认为不可能在服务器端 在谷歌 进行 这可以在客户端通过利用 js
  • spring-hibernate 花费更多时间的任何原因?

    目前 我正在春季和冬眠期间从事一个项目 我来到这里 获取记录并在 JSP 中显示这些记录需要更多时间 我在各处都保留了时间戳 以查看哪里花费了更多时间 Time HomeController start 2014 07 09 18 58 5
  • 从 Spring 启动运行 Java 类

    我使用的是Java8和Spring4 3 1 我有一个 Java Spring 应用程序托管由浏览器和移动应用程序客户端访问的 RESTfult 服务 其次 我编写了一个侦听事件的聊天服务器 socket io 来自客户 该聊天服务器正在从
  • 如何列出所有已加载的 Spring bean 定义文件

    在大型企业系统中 并不总是清楚在 ApplicationContext 构建期间导入了哪些文件 有没有办法列出过程中加载的所有文件 我知道如何列出加载的属性文件 但不知道导入的 bean 文件 更新示例 文件 1 applicationCo
  • 我们可以将请求分派到 servlet 内的 HTML

    这可能吗 RequestDispatcher rd request getRequestDispatcher index html rd forward request response 是的 您可以将请求分派到 HTML 页面
  • 使用用户名和密码登录 LinkedIn 失败

    LinkedIn使用oauth登录其api 服务器中无法登录api 我尝试使用http请求登录linkedin并获取oauth verifier 但我得到了这样的回应 很抱歉 出现了问题 你的申请 请确保您 启用cookie并重试 或点击此
  • 当列表中不存在 X 时,从列表中查找大于 X 的值

    我试图从列表中查找大于特定值 在我的情况下已知 的值 Example Given list 1 2 5 10 15 list is sorted 查找大于的值X 7在这种情况下 期望的结果 返回一个包含值的列表 10 15 我尝试使用jav
  • 如何在 Hibernate 中使用 SELECT 进行 INSERT

    我需要在休眠中实现以下请求 insert into my table max column values select max id from special table where 如何在休眠中使用注释来做到这一点 Special tab

随机推荐