Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用ChannelAdaptor和QMUX发送iso消息时出现问题

使用ChannelAdaptor和QMUX发送iso消息时出现问题
EN

Stack Overflow用户
提问于 2020-07-30 04:37:54
回答 1查看 850关注 0票数 0

我正在使用通道适配器和qmux将iso8583消息发送到套接字服务器。

我用netbeans编写了2个maven项目Jpos客户端和服务器。

服务器接受连接,但没有收到消息(或者客户端没有发送消息),但是当我取消客户端项目的过程时,服务器收到

如果我说错了,请纠正我。

下面是我的配置文件(参考http://jpos.org/doc/proguide-draft.pdf)

10_channel.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<channel-adaptor name='test-channel' 
                 class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2">
    <channel class="org.jpos.iso.channel.ASCIIChannel" logger="Q2" realm="test-channel"
                 packager="org.jpos.iso.packager.GenericPackager">       
        <property name="packager-config" value="src/main/resources/iso8583.xml" />
        <property name="host" value="127.0.0.1" />
        <property name="port" value="9090" />
        <property name="connection-timeout" value="15000" /> 
        <property name="timeout" value="3000000" />
        <property name="keep-alive" value="true" />  
    </channel>
<!--    <ignore-iso-exceptions>yes</ignore-iso-exceptions>-->
    <in>client-send</in>
    <out>client-receive</out>
    <reconnect-delay>10000</reconnect-delay>
</channel-adaptor>

20_mux.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<mux class="org.jpos.q2.iso.QMUX" logger="Q2" name="test-mux">
    <in>client-receive</in>
    <out>client-send</out>
    <ready>test-channel.ready</ready>
    <unhandled>myunhandledqueue</unhandled>
    <key>2 7</key> 
</mux>

JPos客户端代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Q2 q2 = new Q2("src/main/deploy/");
q2.start();
QMUX mux = (QMUX)NameRegistrar.getIfExists("mux.test-mux");
if (mux != null && mux.isConnected()) {
            ISOMsg request = new IsoMessage().build();    //dump iso message
            ISOMsg response = mux.request(request, REQUEST_TIMEOUT);
            if (response != null) {
                ISOMsg receivedIsoMsg = new ISOMsg();
                receivedIsoMsg.setPackager(new GenericPackager("path_to_file_xml"));
                receivedIsoMsg.unpack(response.getBytes());
                receivedIsoMsg.dump(System.out, "");
            }
  }

套接字服务器代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ServerSocket serverSocket;
try {
            System.out.println("Binding to port " + SERVER_PORT + ", please wait  ...");
            serverSocket = new ServerSocket(SERVER_PORT);
            System.out.println("Server started: " + serverSocket);
            System.out.println("Waiting for a client ...");
            while (true) {
                try {
                    Socket socket = serverSocket.accept();
                    DataInputStream dis = new DataInputStream(socket.getInputStream());
                    String message = (String) dis.readLine();
                    System.out.println("Message Received: " + message);                   
                    ISOMsg receivedIsoMsg = new ISOMsg();
                    receivedIsoMsg.setPackager(new GenericPackager("path_to_file_xml"));
                    receivedIsoMsg.unpack(message.getBytes());
                    receivedIsoMsg.setMTI("0110");
                    receivedIsoMsg.set(39,"00");
                    receivedIsoMsg.dump(System.out, "");
                    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
                    //write object to Socket
                    dos.writeUTF(new String(receivedIsoMsg.pack()));

                } catch (IOException | ISOException ex) {
                    System.err.println(ex);
                }
            }
        } catch (IOException e1) {
            try {
                serverSocket.close();
            } catch (IOException ex) {
                 System.err.println(ex);
            }
        } 

跟踪日志客户端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--- exec-maven-plugin:1.2.1:exec (default-cli) @ JposTest ---
<log realm="Q2.system" at="2020-07-30T10:45:25.638">
  <info>
    Q2 started, deployDir=/Users/lap/NetBeansProjects/JposTest/src/main/deploy, environment=default
  </info>
</log>
<log realm="Q2.system" at="2020-07-30T10:45:26.160" lifespan="507ms">
  <version>
    jPOS 2.1.3 master/95b8dce (2019-06-16 15:16:57 ART) 

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

jPOS Community Edition, licensed under GNU AGPL v3.0.
This software is probably not suitable for commercial use.
Please see http://jpos.org/license for details.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)

iQEcBAEBAgAGBQJMolHDAAoJEOQyeO71nYtFv74H/3OgehDGEy1VXp2U3/GcAobg
HH2eZjPUz53r38ARPiU3pzm9LwDa3WZgJJaa/b9VrJwKvbPwe9+0kY3gScDE1skT
ladHt+KHHmGQArEutkzHlpZa73RbroFEIa1qmN6MaDEHGoxZqDh0Sv2cpvOaVYGO
St8ZaddLBPC17bSjAPWo9sWbvL7FgPFOHhnPmbeux8SLtnfWxXWsgo5hLBanKmO1
1z+I/w/6DL6ZYZU6bAJUk+eyVVImJqw0x3IEElI07Nh9MC6BA4iJ77ejobj8HI2r
q9ulRPEqH9NR79619lNKVUkE206dVlXo7xHmJS1QZy5v/GT66xBxyDVfTduPFXk=
=oP+v
-----END PGP SIGNATURE-----

  </version>
</log>
<log realm="Q2.system" at="2020-07-30T10:45:26.168" lifespan="5ms">
  <info>
    deploy: /Users/lap/NetBeansProjects/JposTest/src/main/deploy/10_zp_channel.xml
  </info>
</log>
<log realm="Q2.system" at="2020-07-30T10:45:26.199" lifespan="30ms">
  <info>
    deploy: /Users/lap/NetBeansProjects/JposTest/src/main/deploy/20_zp_qmux.xml
  </info>
</log>
<log realm="Q2.system" at="2020-07-30T10:45:26.207" lifespan="8ms">
  <info>
    deploy: /Users/lap/NetBeansProjects/JposTest/src/main/deploy/99_sysmon.xml
  </info>
</log>
<log realm="org.jpos.q2.qbean.SystemMonitor" at="2020-07-30T10:45:26.225">
  <info>
    Starting SystemMonitor
  </info>
</log>
<log realm="org.jpos.q2.qbean.SystemMonitor" at="2020-07-30T10:45:26.225">
  <info>
               ......
     thread count: 10
     peak threads: 10
     user threads: 7
            Thread[Reference Handler,10,system]
            Thread[Finalizer,8,system]
            Thread[Signal Dispatcher,9,system]
            Thread[main,5,main]
            Thread[pool-1-thread-1,5,main]
            Thread[Q2-dd666708-34a1-46dc-9a10-4df253d9249a,5,main]
            Thread[Thread-1,5,main]
            Thread[channel-sender-client-send,5,main]
            Thread[channel-receiver-client-receive,5,main]
            Thread[SystemMonitor,5,main]
    name-registrar:
      tspace:default: org.jpos.space.TSpace
         key-count: 0
            gcinfo: 0,0
      Q2: org.jpos.q2.Q2
      test-channel: org.jpos.q2.iso.ChannelAdaptor
        tx=0, rx=0, connects=0, last=0
      logger.Q2: org.jpos.util.Logger
      channel.test-channel: org.jpos.iso.channel.ASCIIChannel
      mux.test-mux: org.jpos.q2.iso.QMUX
        tx=0, rx=0, tx_expired=0, tx_pending=0, rx_expired=0, rx_pending=0, rx_unhandled=0, rx_forwarded=0, connected=false, last=0
      logger.: org.jpos.util.Logger
  </info>
</log>
<log realm="test-channel/127.0.0.1:9090" at="2020-07-30T10:45:36.309" lifespan="10084ms">
  <connect>
    Try 0 127.0.0.1:9090
  </connect>
</log>

<log realm="test-channel/127.0.0.1:9090" at="2020-07-30T10:45:55.579" lifespan="1ms">
  <send>
    <isomsg direction="outgoing">
      <!-- org.jpos.iso.packager.GenericPackager[src/main/resources/iso8583.xml] -->
      <field id="0" value="0100"/>
      <field id="2" value="123456"/>
      <field id="3" value="000010"/>
      <field id="4" value="1500"/>
      <field id="7" value="1206041200"/>
      <field id="11" value="000001"/>
      <field id="41" value="12340001"/>
      <field id="49" value="840"/>
    </isomsg>
  </send>
</log>

服务器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--- exec-maven-plugin:1.2.1:exec (default-cli) @ AppTest ---
Binding to port 9090, please wait  ...
Server started: ServerSocket[addr=0.0.0.0/0.0.0.0,localport=9090]
Waiting for a client ...
Client accepted: Socket[addr=/127.0.0.1,port=58902,localport=9090]

=>客户端无法发送消息,但如果我取消客户端项目的进程,服务器会收到消息和打印日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Message Received: 00730100722000000080800006123456000010000000001500120604120000000112340001840
<isomsg>
  <!-- org.jpos.iso.packager.GenericPackager -->
  <field id="0" value="0110"/>
  <field id="8" value="80000612"/>
  <field id="18" value="3456"/>
  <field id="19" value="000"/>
  <field id="20" value="010"/>
  <field id="23" value="000"/>
  <field id="27" value="0"/>
  <field id="39" value="00"/>
  <field id="57" value=""/>
</isomsg>
EN

回答 1

Stack Overflow用户

发布于 2020-07-30 15:25:30

问题是您正在尝试使用readLine接收消息,而iso消息不是以EOL结尾的字符串。

我相信当客户端断开连接时,readLine方法会返回,因为输入流是关闭的。

最好是在服务器上使用ISOServer,或者使用完整的q2来实现它。

否则,您应该首先读取消息长度,然后从输入流中读取该字节数,而不是等待可能是消息本身的一部分也可能不是消息本身的新行字符

您可以按照http://www.jpos.org/tutorials上的前两个jpos教程,了解如何使用请求侦听器配置服务器来处理请求。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63166277

复制
相关文章
firebase怎么用_firebase是什么
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/168361.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/20
4.2K0
firebase怎么用_firebase是什么
2023 Google 开发者大会:Firebase技术探索与实践:从hello world 到更快捷、更经济的最佳实践
Firebase 是Google推出的一个云服务平台,同时也是一个应用开发平台,可帮助你构建和拓展用户喜爱的应用和游戏。Firebase 由 Google 提供支持,深受全球数百万企业的信任。开发人员可以利用它更快更轻松地创建高质量的应用程序。该平台拥有众多的工具和服务,其中包括实时数据库、云函数、身份验证和更多。近年来,Firebase推出了一系列的更新和新特性,其中包括并发属性。在本文中,前面我会向大家介绍这款产品的特性,以及如何使用它开发一个非常简单的应用,最后我们将探讨Firebase中 Cloud Functions for Firebase 的全新并发选项及其如何影响应用程序的开发。 在2023 Google开发者大会上Firebase带来了最新的特性动态分享,主题为 Firebase 应用打造更快捷、更经济的无服务器 API。本片文章就带领大家一同来体验最新的特性。为了兼顾还没使用过Firebase的小白,本文会前面会讲解一下Firebase的使用。
拿我格子衫来
2023/09/15
5520
2023 Google 开发者大会:Firebase技术探索与实践:从hello world 到更快捷、更经济的最佳实践
扩大Android攻击面:React Native Android应用程序分析
React Native是一款移动端应用程序框架,由于该框架允许开发人员使用React和原生平台功能,目前有很多Android和iOS应用程序都是基于该框架进行开发的。
FB客服
2020/03/03
9.9K0
[C++模版] 判断函数入参是不是一个lambda
https://lewissbaker.github.io/2022/08/27/understanding-the-compiler-transform#introduction
望天
2023/02/23
3.3K0
Firebase 如何创建登录 Token
Firebase 的 token 可以使用 firebase 命令行工具来进行创建。
HoneyMoose
2021/04/02
2.5K0
Firebase 如何创建登录 Token
Android Firebase 服务简介
Firebase初步了解 什么事Firebase? Firebase成立于2011年,在被Google收购之前,Firebase是一个协助开发者快速构建App,能够提供行动应用专用开发平台及SDK的一款产品,简单的说大概就是一套集成后台服务工具。早在2014年,谷歌收购了Firebase,这主要是一种面向应用程序开发人员的数据库。Firebase基本上向广大的应用程序开发人员提供不同的服务,比如存储、消息传递、通知和身份验证等服务。 在今年的I/O大会上,谷歌发表了新版的Firebase,新的Firebas
xiangzhihong
2018/02/05
22.9K0
Android  Firebase 服务简介
oracle 不是单组分组函数 查询条数,oracle不是单组分组函数 不是单组分组函数怎么解决…
这种错误报告通常使用聚合函数,如count和sum,但不使用groupby来声明分组模式。
全栈程序员站长
2022/09/07
2.8K0
Google 的 Firebase 如何删除项目
https://www.ossez.com/t/google-firebase/13792
HoneyMoose
2021/11/02
3.2K0
Google 的 Firebase 如何删除项目
与 FireBase 亲密接触
正常的 App 都是属于网络应用,数据都是从服务器上获取的。这就需要有专业的后台开发人员开发后台业务服务器,然后为我们 App 提供数据。自从云出现之后,各大云主机厂商提供了一个云服务 PAAS(Platform-as-a-Service的缩写),意思是平台即服务。PaaS是一个执行代码以及管理应用运行环境的开发平台,用户通过SVN或者Git之类的代码版本管理工具与平台交互。但这也是开发人员具备后台开发的能力。因此,
猴哥yuri
2018/08/16
16K0
我们弃用 Firebase 了
作者 | John Considine 译者 | 平川 策划 | 刘燕 我们已经在 Firebase 上发布了 10 几款应用程序,几乎用到了该平台每个方面的特性,并设计了一个可以实现优雅扩展的手册。可以说,事实已经证明,Firebase 对 K-Optional Software 而言是非常宝贵的工具。 就在 2022 年 3 月,我们的开发人员还在为 Firebase Extensions 等创新欢呼。遗憾的是,过去几个月的三个主要变化破坏了开发体验,因此,在新项目中,K-Optional 将
深度学习与Python
2023/03/29
32.8K0
我们弃用 Firebase 了
不是单组分组函数
大家好,又见面了,我是你们的朋友全栈君。问题: 一: SELECT tablespace_name, SUM(bytes) free FROM dba_free_space 不是单组分组函数 原因: 1、如果程序中使用了分组函数,则有两种情况可以使用: 程序中存在 group by ,并指定了分组条件,这样可以将分组条件一起查询出来 改为: SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name ; 如果不使用分组的活,则只能单独使用分组函数 改为: SELECT SUM(bytes) free FROM dba_free_space ; 2、在使用分组函数的时候,不能出现分组条件之外的字段 总结:在 select 需要查询的语句中选中的字段,必须出现在 group by 子句中
全栈程序员站长
2022/09/07
2.4K0
面试官:为什么data属性是一个函数而不是一个对象?
在我们定义好一个组件的时候,vue最终都会通过Vue.extend()构成组件实例
@超人
2021/02/26
3.2K0
面试官:为什么data属性是一个函数而不是一个对象?
统计函数与通配符相爱,不是意外!
首插入音乐,功放党请慎点。 海鸟跟鱼相爱,只是一场意外! 但是统计函数和通配符相爱,却是一种必然! 统计函数何许人也:Sumif、Countif、AverageIf、Sumifs、Countifs、A
用户1332619
2018/03/08
2.6K0
统计函数与通配符相爱,不是意外!
做什么样的软件系列之Firebase
为什么要写这一篇? 做为一个iOS开发者我没有精力自己实现一套,登陆系统后台,广告系统后台,自己尝试写过身份认证系统,但是忘记密码之类的写的又丑又简陋。同时写后端和app又不能兼顾。
于欣轩
2018/05/25
4.4K0
ORA-00937:不是单组分组函数[通俗易懂]
SELECT COUNT(*) BZC144, NVL(SUM(BCF125), 0) BZC145, CF11.AAA020 FROM CF11, CF12 WHERE CF11.BCF110 = CF12.BCF110 AND CF11.AAE100 = ‘1’;
全栈程序员站长
2022/09/14
4.1K0
ORA-00937: 不是单组分组函数
此时将会报错 ORA-00937: 不是单组分组函数— 解释意思为: select语句中又在查询某一列的值,其中还有聚合函数。oracle数据库都要疯了。。
全栈程序员站长
2022/07/02
3K0
flutter中多flavors方案以及添加firebase​
有想做海外市场的同学们,可能需要用到firebase。今天我们讲讲怎么使用「FlutterFire CLI」添加 firebase以及如何设置「flavors」
用户1974410
2022/09/20
9.9K0
flutter中多flavors方案以及添加firebase​
在硬化负载均衡这条路上,字节不是第一个,也不是最后一个
对Tiara和SilkRoad负载均衡方案感兴趣的同学点赞和在看后,在公众号后台回复“tooyum29”可以获取下载地址。
用户6874558
2023/03/06
1.3K0
在硬化负载均衡这条路上,字节不是第一个,也不是最后一个
数据集永久下架,微软不是第一个,MIT 也不是最后一个
内容概要:麻省理工学院在近日发出通知,永久下线著名微小图像数据集 Tiny Images Dataset ,原因是被指出涉嫌种族歧视和女性歧视。
HyperAI超神经
2020/07/03
1.1K0
点击加载更多

相似问题

如何关闭与okhttp的HTTP连接?

13

HTTP:发送请求后关闭socket进行写入?

24

C++ -在连接关闭后发送HTTP /GET

10

OkHttp在请求超时时未关闭连接

10

代理后的单http请求

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文