원격 Tcp 서버 장치는 한 번에 8 바이트의 데이터를 보내고 비교적 빠른 속도로 데이터를 전송합니다 (그러나 끔찍한 속도는 아닙니다). 어쨌든, 나는 8 바이트를 받고 주어진 8 바이트를 제정하고 싶다. 그러나, 내 count (코드에서) 8 바이트의 여러 배수, 길이가 16에서 120 + 바이트 다양한 위치를 다시 8 바이트 배수가있는 bytearrays받는 것으로 보입니다.tcp socket에서 하나의 패킷 만 빠르게받는 방법
Wireshark를 확인하면 원격 Tcp 서버가 8 바이트를 올바르게 보내고 결합하지 않은 것 같습니다. 이것은 소켓의 읽기가 너무 느려서 내가 원하지 않는 나에게 8 바이트 간격을 되풀이하는 것을 보여준다. 예 :
8bytes-8bytes-16bytes-8bytes-8bytes-56bytes.
여기에 데이터 스트림의 시간 소인이 10ms 정도입니다. 8 개 바이트의 데이터의 어떤 배수가 없는지 확인하면서
(13:44:23.210) 00h 10h 01h 06h FFh 3Ah FFh FFh
(13:44:23.290) 00h 10h 01h 06h FFh 3Fh FFh FFh
(13:44:23.300) 00h 10h 01h 06h FFh 44h FFh FFh
방법 제가
효율적으로 가능한 한 빠르게되도록 포트로부터 판독 하는가?아래 코드는 알 수없는 크기의 데이터를 읽고 추가 처리를 위해 다시 NetworkManager에 게시하는 세그먼트입니다. 원하는 효과를 얻으려는 목적으로 다른 스트림을 사용해 보았지만 스트림을 보장하지 않았습니다.
private class Receive extends Thread {
private InputStream inputStream;
private DataInputStream dataInputStream;
private BufferedInputStream bufferedInputStream;
private ByteArrayOutputStream byteArrayOutputStream;
public void run() {
if (DEBUG) Log.d(TAG + " \"" + name + "\"", String.valueOf(getId()) + ":receive run.");
bundle = new Bundle();
buffer = new byte[1024];
try {
bufferedInputStream = new BufferedInputStream(socket.getInputStream());
} catch (IOException ioException) {
Log.d(TAG + " \"" + name + "\"", String.valueOf(getId()) + ":IOException", ioException);
}
while (connected && !closed) {
if (DEBUG) Log.d(TAG + " \"" + name + "\"", String.valueOf(getId()) + ":retry read.");
try {
// socket.setSoTimeout(timeout);
int count = bufferedInputStream.read(buffer);
byteArrayOutputStream = new ByteArrayOutputStream(count);
if (count == -1) {
networkManager.stopTcpNetwork(name);
closed = true;
Log.d(TAG + " \"" + name + "\"", String.valueOf(getId()) + "Connection Lost?!?!");
} else {
if (DEBUG) Log.d(TAG + " \"" + name + "\"", String.valueOf(getId()) + ":call back." + " Count: " + String.valueOf(count));
byteArrayOutputStream.write(buffer, 0, count);
bundle.putByteArray(name, byteArrayOutputStream.toByteArray());
// bundle.putByteArray(name, buffer);
message = networkManager.obtainMessage();
message.what = Messages.MESSAGES_TCP_DATA.getInt();
message.setData(bundle);
networkManager.sendMessage(message);
}
} catch (SocketTimeoutException socketTimeoutException) {
if (DEBUG) Log.d(TAG + " \"" + name + "\"", String.valueOf(getId()) + ":no data yet.");
} catch (Exception exception) {
Log.d(TAG + " \"" + name + "\"", String.valueOf(getId()) + ":Exception", exception);
}
}
}
}
'buffer = new byte [8];'? – greenapps
@greenapps가 읽기 작업을 효과적으로 가속화합니까? –
왜 그렇게 생각하니? 그리고 왜 물어 보죠? – greenapps