Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

I need help with this assignment. See the instruction below and please can you do pseudo code too for ping client. I will appreciate that.

I need help with this assignment. See the instruction below and please can you do pseudo code too for ping client. I will appreciate that. Thank

The following code fully implements a ping server. You need to compile and run this code. You should study this code carefully, as it will help you write your Ping client.

import java.io.*; import java.net.*; import java.util.*;

/** Server to process ping requests over UDP. */

public class PingServer {

private static final double LOSS_RATE = 0.3;private static final int AVERAGE_DELAY = 100; // milliseconds

public static void main(String[] args) throws Exception { // Get command line argument. if (args.length != 1) { System.out.println("Required arguments: port"); return; }

int port = Integer.parseInt(args[0]);

// Create random number generator for use in simulating // packet loss and network delay.Random random = new Random();

// Create a datagram socket for receiving and sending UDP packets // through the port specified on the command line. DatagramSocket socket = new DatagramSocket(port);

// Processing loop. while (true) {

// Create a datagram packet to hold incomming UDP packet. DatagramPacket request = new DatagramPacket(new byte[1024], 1024);

// Block until the host receives a UDP packet. socket.receive(request);

// Print the recieved data. printData(request);

// Decide whether to reply, or simulate packet loss. if (random.nextDouble() < LOSS_RATE) {

System.out.println(" Reply not sent.");

continue; }

// Simulate network delay.Thread.sleep((int) (random.nextDouble() * 2 * A VERAGE_DELA Y));

// Send reply.InetAddress clientHost = request.getAddress();int clientPort = request.getPort();byte[] buf = request.getData();DatagramPacket reply = new DatagramPacket(buf, buf.length, clientHost, clientPort); socket.send(reply);

System.out.println(" Reply sent."); }

}

/** Print ping data to the standard output stream. */

private static void printData(DatagramPacket request) throws Exception {

// Obtain references to the packet's array of bytes. byte[] buf = request.getData();

// Wrap the bytes in a byte array input stream,// so that you can read the data as a stream of bytes. ByteArrayInputStream bais = new ByteArrayInputStream(buf);

// Wrap the byte array output stream in an input stream reader, // so you can read the data as a stream of characters. InputStreamReader isr = new InputStreamReader(bais);

// Wrap the input stream reader in a bufferred reader,// so you can read the character data a line at a time.// (A line is a sequence of chars terminated by any combination of and .) BufferedReader br = new BufferedReader(isr);

// The message data is contained in a single line, so read this line. String line = br.readLine(); // Print host address and data received from it. System.out.println(

"Received from " + request.getAddress().getHostAddress() + ": " +new String(line) );

}}

Your Job: The Client

You should write the client so that it sends 10 ping requests to the server, separated by approximately one second. Each message contains a payload of data that includes the keyword PING, a sequence number, and a timestamp. After sending each packet, the client waits up to one second to receive a reply. If one seconds goes by without a reply from the server, then the client assumes that its packet or the server's reply packet has been lost in the network.

Hint: Cut and paste PingServer, rename the code PingClient, and then modify the code.

You should write the client so that it starts with the following command:

java PingClient host port

where host is the name of the computer the server is running on and port is the port number it is listening to. Note that you can run the client and server either on different machines or on the same machine.

The client should send 10 pings to the server. Because UDP is an unreliable protocol, some of the packets sent to the server may be lost, or some of the packets sent from server to client may be lost. For this reason, the client cannot wait indefinitely for a reply to a ping message. You should have the client wait up to one second for a reply; if no reply is received, then the client should assume that the packet was lost during transmission across the network. You will need to research the API for DatagramSocket to find out how to set the timeout value on a datagram socket.

Your client will display the reply message from the server along with the RTT for each datagram received or a message indicating lost packet for those not returned within the time limit.

When developing your code, you should run the ping server on your machine, and test your

client by sending packets to localhost (or, 127.0.0.1). After you have fully debugged your code, you should see how your application communicates across the network with a ping server run by another member of the class.

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Students also viewed these Databases questions

Question

understand the meaning of the terms discipline and grievance

Answered: 1 week ago