ネットワークプログラミングに関しては、私はまったくの初心者です。
次のエラーが表示されます。
E/AndroidRuntime( 4095): Caused by: java.lang.IndexOutOfBoundsException: length=18, offset=0, buffer size=0
次の行で:
SocketAddress servaddr = udpChannel.receive(rcvHskBuf);
これは私がバッファを作成する方法です
ByteBuffer rcvHskBuf = ByteBuffer.allocateDirect(packetSize);
デバッグのために、引数(アプリで変更可能)をデフォルト1432
から1432*20
以下に説明するように変更しました。
これをデバッグするにはどうすればよいですか? allocateDirect()
引数を以前の 20 倍に変更しようとしましたが、それでもこの問題が発生します。
完全なエラー ログは次のとおりです。
02-27 22:28:01.739: E/AndroidRuntime(2753): FATAL EXCEPTION: AsyncTask #1
02-27 22:28:01.739: E/AndroidRuntime(2753): java.lang.RuntimeException: An error occured while executing doInBackground()
02-27 22:28:01.739: E/AndroidRuntime(2753): at android.os.AsyncTask$3.done(AsyncTask.java:278)
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.lang.Thread.run(Thread.java:856)
02-27 22:28:01.739: E/AndroidRuntime(2753): Caused by: java.lang.IndexOutOfBoundsException: length=18, offset=0, buffer size=0
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.net.DatagramPacket.setLengthOnly(DatagramPacket.java:234)
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.net.DatagramPacket.setLength(DatagramPacket.java:222)
02-27 22:28:01.739: E/AndroidRuntime(2753): at libcore.io.IoBridge.postRecvfrom(IoBridge.java:528)
02-27 22:28:01.739: E/AndroidRuntime(2753): at libcore.io.IoBridge.recvfrom(IoBridge.java:516)
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.nio.DatagramChannelImpl.receiveDirectImpl(DatagramChannelImpl.java:232)
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.nio.DatagramChannelImpl.receive(DatagramChannelImpl.java:185)
02-27 22:28:01.739: E/AndroidRuntime(2753): at com.alu.wireless.puredata.PSConnection.UDPInitialization(PSConnection.java:315)
02-27 22:28:01.739: E/AndroidRuntime(2753): at com.alu.wireless.puredata.PSConnection.PSInitialization(PSConnection.java:73)
02-27 22:28:01.739: E/AndroidRuntime(2753): at com.alu.wireless.puredata.PureDataActivity$MyTask.doInBackground(PureDataActivity.java:262)
02-27 22:28:01.739: E/AndroidRuntime(2753): at com.alu.wireless.puredata.PureDataActivity$MyTask.doInBackground(PureDataActivity.java:1)
02-27 22:28:01.739: E/AndroidRuntime(2753): at android.os.AsyncTask$2.call(AsyncTask.java:264)
02-27 22:28:01.739: E/AndroidRuntime(2753): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-27 22:28:01.739: E/AndroidRuntime(2753): ... 4 more
奇妙なことに、アプリはバッファの内容を問題なく出力します。明らかに、バッファの内容を出力するコードは、例外を引き起こした行の後に配置されています (上記の 315 行目、ここでバッファを作成します)。
ヒントや指針をいただければ幸いです。前もって感謝します。