0

現在、Scala を使用して CONNECT Stomp フレームを ApolloMQ ブローカーに送信しようとしています。私は次のことをしています:

val socketChannel: SocketChannel = SocketChannel.open
val socketAddress: SocketAddress = new InetSocketAddress("localhost", 61613)
val frame = "CONNECT\naccept-version:1.0,1.1,1.2\nhost:localhost\n" +
            "login:username\npasscode:password\n\n\0".toCharArray
val byteArray = frame.map { c => c.asInstanceOf[Byte] }
val bb = ByteBuffer.allocate(128)
bb.put(byteArray)

次に接続して書き込もうとすると

socketChannel.connect(socketAddress)
socketChannel.write(bb)

と書いているようですが、何も返ってこず、すぐに接続が切れてしまいます。ByteBuffer最初を巻き戻せば

bb.rewind
socketChannel.connect(socketAddress)
socketChannel.write(bb)

接続が Apollo にヒットしているように見えますが、以下がスローされます

java.net.ProtocolException: The maximum command length was exceeded

私は周りを検索しましたが、なぜこれが起こっているように見えるのかについての情報を見つけることができません.

4

1 に答える 1

1

文字列から ByteBuffer に変換するには、より簡単な方法を試してください。

val bb = ByteBuffer.wrap(frame.getBytes("UTF-8"))
于 2014-01-24T14:30:10.220 に答える