В приложении, которое я разрабатываю для Android, я отправляю байты с номером 5, используя сокеты tcp и udp. Я хотел бы знать, возможно ли получить объем полезной нагрузки, который был получен до тех пор, пока не было сгенерировано исключение SocketTimeoutException. Я выполняю некоторые подвижные тесты с технологией Wi-Fi Direct, поэтому при отправке все может быть не получено, поскольку одноранговые ранее отключены.
Также для случая UDP, когда происходит потеря пакета, я хотел бы знать объем информации, которую я получаю.
Чтобы прочитать, что я получаю, я использую readFully и получаю. Этот прием осуществляется за один шаг или в цикле, в котором я получаю большое количество информации. Я не мог получить байты один за другим, потому что это было бы очень медленно.
TCP RX:
ServerSocket serverSocket = new ServerSocket(SERVERPORT);
Socket client = serverSocket.accept();
DataInputStream DIS = new DataInputStream(client.getInputStream());
int tamMensaje = (100 * 1000 * 1000);
byte[] payload = new byte[tamMensaje];
DIS.readFully(payload);
int failures = 0;
for (int i = 0; i < tamMensaje; i++) {
if (payload[i] != 5) {
failures = failures + 1;
}
}
int nPayLoad = payload.length- failures;
client.close();
serverSocket.close();
UDP RX:
DatagramSocket datagramSocket = new DatagramSocket(SERVERPORT);
byte[] buffer = new byte[1400];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
int tamMensaje = 1400 *71428;
int iteration = 71428;
for (int i = 0; i < iteration; i++) {
datagramSocket.receive(packet);
msg_received = msg_received + new String(buffer, 0, packet.getLength());
}
byte[] payload = msg_received.getBytes();
int failures = 0;
for (int i = 0; i < tamMensaje; i++) {
if (payload[i] != 5) {
failures = failures + 1;
}
}
int nPayload = payload.length- failures;
datagramSocket.close();
Как узнать объем полученной информации, если связь прерывается при отправке по TCP и UDP, а также в случае, если UDP не получает все, что должен?
Спасибо