【发布时间】:2014-11-06 21:29:44
【问题描述】:
我正在开发 Android 应用程序,手机在哪里通过 Wifi-Direct 执行一些计算。
就我而言,效率至关重要。我的协议的瓶颈是网络。我使用SocketChannel 接收/传输数据。
这是我的伪代码:
byte[] array = new byte[]{20,20,20,20,20,20,20,20,20,20};
for (int i=0; i<10; i++)
{
ByteBuffer sendBB = ByteBuffer.allocate(buffSize);
sendBB.put(array, 0, array.length);
sendBB.rewind();
ByteBuffer receiveBB = ByteBuffer.allocate(buffSize);
try {
socketChannel.read(receiveBB);
socketChannel.write(sendBB);
byte[] received = new byte[10];
receiveBB.rewind();
receiveBB.get(received, 0, 10);
Log.i("Received", Arrays.toString(received));
} catch (IOException e) {
e.printStackTrace();
}
}
类似的代码是给对方的。 连接是这样创建的:
serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(socketAddress);
socketChannel = serverSocketChannel.accept();
事实证明,当buffSize 很小时,一切都传输良好:100、200。
当它是 500 或更高时,我会丢失数据。我收到类似的东西:
[20,20,20,20,20,20,20,20,20,20]
[0,0,0,0,0,0,0,0,0,0]
[20,20,20,20,20,20,20,20,20,20]
[20,20,20,20,20,20,20,20,20,20]
[0,0,0,0,0,0,0,0,0,0]
[0,0,0,0,0,0,0,0,0,0]
[20,20,20,20,20,20,20,20,20,20]
[20,20,20,20,20,20,20,20,20,20]
[20,20,20,20,20,20,20,20,20,20]
[20,20,20,20,20,20,20,20,20,20]
更高的缓冲区让位于更高的速度。有没有办法,如何保持速度并防止数据丢失? 谢谢
【问题讨论】:
标签: java android networking nio socketchannel