2013-01-16 6 views
0

RXTX 전송을 올바르게 사용하는 방법을 알아 내는데 어려움을 겪고 있습니다.RXTX with Netty-4.0.0-Beta1-SNAPSHOT

직렬 포트에서 읽은 내용을 소비하고 해독 한 인바운드 처리기를 작성하고 사용자 정의 아웃 바운드 처리기를 통해 직렬 포트에 다른 내용을 보낼 수 있습니다. 지금까지 괜찮아.

이제는 주 프로그램의 MessageToByteEncoder (이전에 얘기했던 동일한 사용자 정의 아웃 바운드 처리기)를 통해 메시지를 작성해야하는 유스 케이스가 있습니다. 결국에는 실제로 Netty를 사용하는 라이브러리가됩니다). 기본적으로 디코더를 거치지 않고 메인 프로그램에서 작성된 메시지를 보내고 인바운드 처리기는 보내지 않는다는 것을 제외하고는 위 시나리오와 동일한 작업을 수행하려고합니다. 내 시나리오에서는이 시나리오가 작동하지 않는 것 같습니다. 내 메시지가 전송되지 않은 것처럼 아무 일도 일어나지 않는 것 같습니다. 불행히도, Netty에는 많은 로그 문이 없기 때문에 틀릴 수도 있습니다. 그러나 주 스레드가 이벤트 루프에 있지 않기 때문에 문제가 발생할 수 있습니다 (여기에는 놀랄 일이 없습니다! :)).

불행히도, RXTX 예제는 (ChannelHandlerContext를 통해) 인바운드 처리기의 메시지 만 작성하므로 내가 잘못하고 있거나 Netty에서 실제로 추가 된 버그가 있는지 찾을 수 없습니다.

제안 사항?

+0

를, 내가 조사한 litte bit를 더 발행하십시오. 나는 "AT \ n"문자열을 보내면 "OK"를 돌려 보내는 Arduino 스케치를 썼다. 지금까지 괜찮 았어, 나는 시리얼 모니터를 통해 확인할 수 있었다. 그런 다음 올바른 직렬 포트와 정확한 전송 속도를 지정하기 위해 Rxtx 예제를 간단히 변경했습니다. Arduino가 무언가를 받았다는 것을 알 수 있지만, buf.writeBytes (in, buf.writableBytes())가 호출 될 때 RxtxChannel.doReadBytes() 메소드에 걸렸습니다 ... – jeje

+0

Hum. 문제점을 발견했을 수도 있습니다 : RxtxChannel.doConnect()에서 중단 점을 사용하여 디버그 모드로 실행하면이 작업을 수행 할 수 있습니다. 경쟁 조건이 있거나 대기가 필요하다고 가정합니다 ... – jeje

+0

사실, 이제 이것을 확인할 수 있습니다 : cpi.open (getClass(). getName()) 바로 다음에 Thread.sleep (5000)), 1000) 잘 작동합니다! – jeje

답변

0

당신은이 두 가지 방법 중 하나를 쓸 수 있어야 : 내가 가진

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

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

첫 번째 옵션은 내가 사용하는 옵션입니다. 나는 제대로 작동하게 만들 수 없다. 런타임에는 오류가 없지만 내 메시지를 쓰지 않으려는 것처럼 보입니다. 두 번째 옵션은 어떻게 사용할 수 있습니까? 내 자신의 컨텍스트를 만들어야합니까? 그렇다면 무엇부터? 내가 연결 한 후에는 미래의 채널 만 있습니다. – jeje

+0

첫 번째가 작동해야합니다 .. 그렇지 않으면 버그 신고를하십시오 –