代码之家  ›  专栏  ›  技术社区  ›  beny23

使用TCP连接的Spring方法是什么?

  •  7
  • beny23  · 技术社区  · 15 年前

    作为我正在开发的Web服务的一部分,我正在通过TCP连接(而不是HTTP)阅读和编写XML,我想知道是否有一种更“弹簧化”的方式(甚至其他想法)来实现我在下面尝试的内容:

        InputStream is = null;
        OutputStream os = null;
        Socket s = null;
        try {
            s = new Socket(address, portNo);
            os = s.getOutputStream();
            os.write(msg.getBytes());
            os.flush();
            is = s.getInputStream();
            String xml = IOUtils.toString(is);
            return xml;
        } finally {
            IOUtils.closeQuietly(os);
            IOUtils.closeQuietly(is);
            if (s != null) s.close();
        }
    

    注意,我对服务器没有控制权,所以我认为我不能使用Spring远程处理,但我想知道是否可以像Spring的JDBCTemplates那样对其进行改进。

    编辑:

    注意,只是为了澄清ioutils是Apache Commons IO…

    4 回复  |  直到 13 年前
        1
  •  1
  •   Rob H    15 年前

    看一看 WebServiceTemplate . 这是Spring为客户端Web服务访问提供的主要抽象。即使您的服务器不是一个典型的Web服务,只要它使用相同的请求-响应模式,您仍然可以使用它作为解决方案的基础。类仅为通信的每个部分(编组、发送请求、接收响应、解组等)提供挂钩。JavaDoc列出了执行Web服务调用所需的所有步骤,您可以覆盖其中的大部分内容。因此,例如,您可以使用内置的编组支持,但是重写 createConnection 建立自定义TCP连接。

        2
  •  5
  •   Gregor    13 年前

    我有一个类似的问题,我想用Spring集成来解决这个问题,听起来非常适合我:

    请注意,SpringIntegration2.0构建在Spring3.0之上,而以前的1.0版本也支持Spring2.x(但不包括TCP/UDP适配器)。

        3
  •  2
  •   matt b    15 年前

    这里的“Spring方法”不适用于如何进行TCP套接字通信,而是适用于 和这个班一起讨论 与之互动。

    所以我认为“Spring方法”将隐藏在 MessageSender (可怕的名字,我知道)接口,这样合作者类只需要处理 邮递员 并且对任何一种低级的套接字通信正在实现该消息的发送这一事实视而不见。

        4
  •  0
  •   Chris Dail    15 年前

    大多数Spring技术都是基于标准的做事方法。TCP/IP的级别比当今大多数应用程序需要处理的级别低。我不记得上次我写了一行直接使用套接字库的代码。相反,通常所做的是在更高级别协议的基础上构建。

    使用HTTP或RMI作为起点可以在套接字级别上节省很多麻烦。有大量优秀的Web服务库可以从用户那里抽象出套接字细节。我建议使用 JAX-WS . Spring在其SpringWS项目中实现了JAX-WS。 Apache CXF 还允许通过Spring配置Web服务。

    RMI也是一个选项。Spring的远程处理将RMI协议从代码中抽象出来,使您能够专注于功能。它不允许您访问套接字,但这可能不是您想要做的。