Oi galera, é o seguinte, desenvolvi um programa client/server para enviar/receber dados utilizando o protocolo UDP e medir a média e o desvio padrão do tempo que levou. Envio de 1 à 8192 bytes, 1, 2, 4, 8, etc… (exponencial de 2), porém o que está acontecendo é que o tempo não está consistente, o quero dizer é que quantidades menores de bytes deveria levar menos tempo que quantidade maiores de bytes para chegar, porém observei que tal comportamento não está acontecendo, na verdade o tempo não está seguindo um padrão.
Não sei se estou enviando corretamente a quantidade de bytes. Segue abaixo o código utilizado no Client e no Servidor. Já tentei de tudo porém não consigo valores consistentes, alguém saberia identificar onde está o problema? Desde já agradeço, metanolbr
Servidor:
import java.io.*;
import java.net.*;
public class UDPServer {
public static void main(String args[]) {
byte[] receiveData = new byte[8192];
byte[] sendData = {1};
try {
// cria socket do servidor com a porta 9876
DatagramSocket serverSocket = new DatagramSocket(9876);
for (int i = 0; i < 14000; i++) {
// declara o pacote a ser recebido
DatagramPacket receivePacket =
new DatagramPacket(receiveData,
receiveData.length);
// recebe o pacote do cliente
serverSocket.receive(receivePacket);
// pega os dados, o endereço IP e a porta do cliente
// para poder mandar a msg de volta
InetAddress IPAddress =
receivePacket.getAddress();
int porta = receivePacket.getPort();
// monta o pacote com enderço IP e porta
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length,
IPAddress, porta);
// envia ao cliente
serverSocket.send(sendPacket);
}
} catch (IOException e) {
System.out.println("Problemas no Servidor");
e.printStackTrace();
}
}
}
Client
import java.io.*;
import java.net.*;
import java.text.SimpleDateFormat;
import java.util.*;
import org.apache.commons.math.stat.descriptive.*;
public class UDPClient {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
byte[] sendData;
byte[] receiveData;
ArrayList vetorTempo;
DescriptiveStatistics stats;
BufferedReader entradaTeclado =
new BufferedReader(new InputStreamReader(System.in));
try {
DatagramSocket clientSocket = new DatagramSocket();
System.out.print("Digite o hostname da maquina que deseja acessar: ");
String hostname = entradaTeclado.readLine();
InetAddress IPAddress = InetAddress.getByName(hostname);
Date data = new Date(System.currentTimeMillis());
SimpleDateFormat formatarData = new SimpleDateFormat("yyyyMMddHHmm");
FileWriter arquivoResultado = new FileWriter("resultado" + formatarData.format(data) + ".csv");
BufferedWriter out = new BufferedWriter(arquivoResultado);
out.write("UDP,");
out.write("MED,");
out.write("DVP\n");
for (int qtdBytes = 1; qtdBytes <= 8192; qtdBytes = qtdBytes * 2) {
vetorTempo = new ArrayList();
sendData = new byte[qtdBytes];
receiveData = new byte[1];
stats = new DescriptiveStatistics();
long tempoInicial;
long tempoFinal;
long tempoTotal = 0;
double mediaTempo = 0;
double desvioPadrao = 0;
System.out.println("\nBYTES: " + qtdBytes);
for (int rodada = 0; rodada < 10; rodada++) {
System.out.println("Rodada: " + rodada);
for (int rtt = 0; rtt < 100; rtt++) {
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length, IPAddress, 9009);
DatagramPacket receivePacket =
new DatagramPacket(receiveData, receiveData.length);
tempoInicial = System.currentTimeMillis();
clientSocket.send(sendPacket);
clientSocket.receive(receivePacket);
tempoFinal = System.currentTimeMillis();
tempoTotal = tempoFinal - tempoInicial;
System.out.println("RTT " + rtt + ": " + tempoTotal + " ms.");
}
vetorTempo.add(tempoTotal);
stats.addValue(tempoTotal);
}
mediaTempo = stats.getMean();
desvioPadrao = stats.getStandardDeviation();
out.write(qtdBytes + "," +
mediaTempo + "," +
desvioPadrao + "\n");
System.out.println("Quantidade de bytes: " + qtdBytes + " Média de Tempo: " + mediaTempo +
"\nDesvio Padrão: " + desvioPadrao);
}
out.close();
clientSocket.close();
} catch (IOException e) {
System.out.println("Problemas no Cliente:");
e.printStackTrace();
}
}
}