【问题标题】:RXTX with Netty-4.0.0-Beta1-SNAPSHOTRXTX 与 Netty-4.0.0-Beta1-SNAPSHOT
【发布时间】:2013-01-16 14:20:15
【问题描述】:

我很难弄清楚如何正确使用 RXTX 传输(从今天的 Git 开始)。

我可以编写入站处理程序,该处理程序使用从串行端口读取的内容,对其进行解码,然后通过自定义出站处理程序将一些其他内容发送到串行端口。到目前为止还不错。

现在,有一个用例,我需要从主程序通过 MessageToByteEncoder(我之前谈到的同一个自定义 outboundhandler)编写消息(最后,这实际上是一个使用 Netty 的库) .所以基本上,我正在尝试与上述情况相同,只是我不通过解码器并发送要从主程序写入的消息,而不是入站处理程序。这种情况在我的情况下似乎不起作用:似乎什么都没有发生,就好像我的消息没有发送一样。不幸的是,Netty 中没有很多日志语句,我可能错了,但我遇到的问题可能会浮出水面,因为主线程不在事件循环中(这并不奇怪!:))。

不幸的是,RXTX 示例仅从入站处理程序(通过 ChannelHandlerContext)写入消息,因此我无法找出我做错了什么,或者 Netty 中最近添加的这个新功能是否存在错误。

有什么建议吗?

【问题讨论】:

  • 实际上,我对这个问题进行了更多调查。我写了一个 Arduino 草图,在发送“AT\n”字符串时发回“OK”。到目前为止很好,我可以通过串行监视器检查。然后我简单地更改了 Rxtx 示例以指定正确的串行端口和正确的波特率。我可以看到 Arduino 收到了一些东西,但是当调用 buf.writeBytes(in, buf.writableBytes()) 时我卡在了 RxtxChannel.doReadBytes() 方法中......
  • 哼。我可能已经发现了问题:如果我在调试模式下运行并在 RxtxChannel.doConnect() 中设置断点,我就可以完成这项工作。我想有一个竞争条件或者某个地方需要等待......
  • 实际上,我现在可以确认这一点:如果我在 cpi.open(getClass().getName(), 1000) 之后添加类似 Thread.sleep(5000) 的内容,它可以正常工作!

标签: netty rxtx


【解决方案1】:

您应该可以使用以下两种方式之一来编写它:

Channel channel = ...
channel.write(YourMessage);

ChannelHandlerContext ctx = ...
ctx.write(YourMessage)

【讨论】:

  • 第一个选项是我使用的那个。我无法让它正常工作。运行时没有错误,但好像我的消息不想写。如何使用第二个选项?我应该创建自己的上下文吗?如果有,从何而来?连接后我只有未来的频道。
【解决方案2】:

我遇到的问题实际上与两个不同的问题有关。

我找到了解决方案(正如人们所预料的那样,问题出在 RXTX 传输本身):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多