1

我需要使用 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) 所以,正如这里提到的,我进一步修改了我的客户端的 .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 方法),但我认为后台模式很混乱,因为现在当我启动我的服务器然后我的客户端处于 bg 模式,有时我得到一个

致命:分叉错误

但大多数时候,客户端发送一条消息,然后在我的控制台上我看到我的软件导致连接中止(错误代码 -1),从日志中我看到通道刚刚关闭,我的客户端甚至没有得到答复。(注意现在我没有修改配置文件)

你们中有人遇到过这种行为吗?是否有其他东西关闭了连接(可能是防火墙)?我是否必须提供其他配置才能完成这项工作?

一旦我可以让它工作,我可以使用我的 java web 应用程序(使用类似于我已经提到的方法)进行直径调用吗?

在此先感谢,非常欢迎任何帮助。

4

0 回答 0