使用Java调用Seagull Diameter客户端

时间:2018-10-07 09:11:48

标签: java client diameter-protocol

我需要使用Diameter协议将我的Java Web应用程序中的某些消息发送到某些服务器,特别是CCR-CCA方案。我看过jdiameter开源项目,但是我的用例不需要这么复杂,因为我只需要发送一个请求并记录响应(实际上我什至不需要CER-CEA部分)。 所以我以为我可以使用在我的webapp下运行的Seagull。我下载了Seagull(适用于Windows),而我想做的基本上是从java环境中为直径环境运行来自Seagull的.bat文件。

那是我到目前为止所做的。.

1)调用客户端的简单测试。这里的包装器仅设置工作目录并启动进程

public static void main(String[] args) {
        List<String> cmd=new ArrayList<>();
        cmd.add("cmd.exe");
        cmd.add("/c");
        cmd.add("my_start_client.bat");
        JavaProcessBuilderWrapper wrapper = new JavaProcessBuilderWrapper();
        Process p = wrapper.createProcess(RedirectErrorsTo.STDERR,
                new HashMap<>(), new File("my_working_dir"), cmd);

        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

        StringBuilder output = new StringBuilder();
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                output.append(line);
            }
            System.out.println(line);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

2)我修改了来自Seagull的客户端和服务器的.bat文件,以使用CCR-CCA协议。

使用此配置运行Java main会导致

  

致命:键盘保存的配置失败错误

在我的日志上。

3)因此,如here所述,我进一步修改了客户端的.bat文件以使其在后台模式下运行,最后添加了-bg。现在我的客户的蝙蝠像这样

@ECHO OFF
rem
 "Diameter Start Script Sample"
 "Local env"
 SET RUN_DIR=C:\Program Files\Seagull

 set PATH=%PATH%;%RUN_DIR%
 set LD_LIBRARY_PATH=%RUN_DIR%
 set RUN_DIR=%RUN_DIR%\diameter-env\run

 cd %RUN_DIR%
 cls
 mode 81,25
 echo "Seagull Diameter Client Sample Start"
seagull -conf ..\config\conf.client.xml -dico ..\config\base_ro_3gpp.xml -scen ..\scenario\ccr-cca.ro.client.xml -log ..\logs\ccr-cca.client.log -llevel ETM -bg

 pause

由于我遇到了一些麻烦,为了使事情简单,我只是尝试使其至少通过cmd起作用(不使用我的java方法),但是我认为后台模式很混乱,因为现在当我启动服务器时然后我的客户进入背景模式,有时我会得到

  

致命:分叉错误

但是在大​​多数情况下,客户端发送一条消息,然后在我的控制台上我看到我的软件正在导致连接中止(错误代码-1),并且从日志中我看到该通道刚刚关闭,而且我的客户甚至没有收到答案。 (注意,现在我保持配置文件不变)

你们有没有面对过这种行为?还有其他关闭连接的功能(也许是防火墙)吗?我是否必须提供其他配置才能使其正常工作?

一旦我可以使用它,我可以使用我的Java Web应用程序(使用与我已经提到的方法类似的方法)进行直径调用吗?

在此先感谢您的帮助。

0 个答案:

没有答案