hi,
i have a ping server and i need to change de code to make a ping cliente to interact with the ping server, to print the time that the ping takes, to send also a ping per sec, like a normal ping, and all of this with UDP, and i need to create something like TCP to know is all the packages arrive ok. this is the code for de ping server. can i have some help? thanks
import java.io.*;
import java.net.*;
import java.util.*;
/* Servidor para processar pedidos ping sobre UDP */
public class PingServer
{
private static final double LOSS_RATE = 0.3;
private static final int AVERAGE_DELAY = 100; // milissegundos
public static void main(String[] args) throws Exception
{
// Obter o argumento da linha de commando.
if (args.length != 1) {
System.out.prin tln("argumentos exigidos: porta");
return;
}
int port = Integer.parseIn t(args[0]);
// Criar um gerador de números aleatórios para ser usado na
// simulação de perda de pacotes e do atraso na rede.
Random random = new Random();
// Criar um socket datagrama para receber e enviar pacotes UDP
// através da porta especificada na linha de comando.
DatagramSocket socket = new DatagramSocket( port);
// Ciclo do processo.
while (true) {
Redes de Computadores I – 2007/08 – Trabalho Prático Prog2 2/5
// Criar um pacote datagrama para armazenar o pacote UDP recebido.
DatagramPacket request = new DatagramPacket( new byte[1024], 1024);
// Bloquear até que a máquina receba um pacote UDP.
socket.receive( request);
// Imprimir os dados recebidos.
printData(reque st);
// Decidir se vai responder ou se vai simular a perda do pacote.
if (random.nextDou ble() < LOSS_RATE) {
System.out.prin tln(" Resposta nao enviada.");
continue;
}
// Simular o atraso na rede.
Thread.sleep((i nt) (random.nextDou ble() * 2 * AVERAGE_DELAY)) ;
// Enviar resposta.
InetAddress clientHost = request.getAddr ess();
int clientPort = request.getPort ();
byte[] buf = request.getData ();
DatagramPacket reply =
new DatagramPacket( buf, buf.length, clientHost, clientPort);
socket.send(rep ly);
System.out.prin tln(" Resposta enviada.");
}
}
/* Imprimir os dados do ping na stream de saida standard. */
private static void printData(Datag ramPacket request) throws Exception
{
// Obter referencias ao array de bytes do pacote.
byte[] buf = request.getData ();
// Colocar os bytes num stream de entrada byte array
// por forma a ler os dados como um stream de bytes.
ByteArrayInputS tream bais = new ByteArrayInputS tream(buf);
// Colocar o stream de saida byte array num leitor de stream de
// entrada para poder ler os dados como um stream de caracteres.
InputStreamRead er isr = new InputStreamRead er(bais);
// Colocar o leitor do stream de entrada num leitor com buffer
// para poder ler os caracteres uma linha de cada vez.
// (Uma linha é uma sequência de chars terminada por qualquer
// combinação de \r e \n.)
BufferedReader br = new BufferedReader( isr);
// Como os dados da mensagem estão contidos numa única linha,
// ler essa linha.
String line = br.readLine();
// Imprimir o endereço da máquina e os dados dela recebidos.
System.out.prin tln(
"Recebido de " +
request.getAddr ess().getHostAd dress() + ": " + new String(line) );
Redes de Computadores I – 2007/08 – Trabalho Prático Prog2 3/5
}
}
i have a ping server and i need to change de code to make a ping cliente to interact with the ping server, to print the time that the ping takes, to send also a ping per sec, like a normal ping, and all of this with UDP, and i need to create something like TCP to know is all the packages arrive ok. this is the code for de ping server. can i have some help? thanks
import java.io.*;
import java.net.*;
import java.util.*;
/* Servidor para processar pedidos ping sobre UDP */
public class PingServer
{
private static final double LOSS_RATE = 0.3;
private static final int AVERAGE_DELAY = 100; // milissegundos
public static void main(String[] args) throws Exception
{
// Obter o argumento da linha de commando.
if (args.length != 1) {
System.out.prin tln("argumentos exigidos: porta");
return;
}
int port = Integer.parseIn t(args[0]);
// Criar um gerador de números aleatórios para ser usado na
// simulação de perda de pacotes e do atraso na rede.
Random random = new Random();
// Criar um socket datagrama para receber e enviar pacotes UDP
// através da porta especificada na linha de comando.
DatagramSocket socket = new DatagramSocket( port);
// Ciclo do processo.
while (true) {
Redes de Computadores I – 2007/08 – Trabalho Prático Prog2 2/5
// Criar um pacote datagrama para armazenar o pacote UDP recebido.
DatagramPacket request = new DatagramPacket( new byte[1024], 1024);
// Bloquear até que a máquina receba um pacote UDP.
socket.receive( request);
// Imprimir os dados recebidos.
printData(reque st);
// Decidir se vai responder ou se vai simular a perda do pacote.
if (random.nextDou ble() < LOSS_RATE) {
System.out.prin tln(" Resposta nao enviada.");
continue;
}
// Simular o atraso na rede.
Thread.sleep((i nt) (random.nextDou ble() * 2 * AVERAGE_DELAY)) ;
// Enviar resposta.
InetAddress clientHost = request.getAddr ess();
int clientPort = request.getPort ();
byte[] buf = request.getData ();
DatagramPacket reply =
new DatagramPacket( buf, buf.length, clientHost, clientPort);
socket.send(rep ly);
System.out.prin tln(" Resposta enviada.");
}
}
/* Imprimir os dados do ping na stream de saida standard. */
private static void printData(Datag ramPacket request) throws Exception
{
// Obter referencias ao array de bytes do pacote.
byte[] buf = request.getData ();
// Colocar os bytes num stream de entrada byte array
// por forma a ler os dados como um stream de bytes.
ByteArrayInputS tream bais = new ByteArrayInputS tream(buf);
// Colocar o stream de saida byte array num leitor de stream de
// entrada para poder ler os dados como um stream de caracteres.
InputStreamRead er isr = new InputStreamRead er(bais);
// Colocar o leitor do stream de entrada num leitor com buffer
// para poder ler os caracteres uma linha de cada vez.
// (Uma linha é uma sequência de chars terminada por qualquer
// combinação de \r e \n.)
BufferedReader br = new BufferedReader( isr);
// Como os dados da mensagem estão contidos numa única linha,
// ler essa linha.
String line = br.readLine();
// Imprimir o endereço da máquina e os dados dela recebidos.
System.out.prin tln(
"Recebido de " +
request.getAddr ess().getHostAd dress() + ": " + new String(line) );
Redes de Computadores I – 2007/08 – Trabalho Prático Prog2 3/5
}
}
Comment