Rev 188 | Rev 190 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
/*******************************************************************************
* File: P1Client.java
* Author: Ira W. Snyder (devel@irasnyder.com)
* Class: CS380 - Computer Networking
*
* Assignment: Project #1
* Date Last Modified: 2006-01-18
*
* Purpose: Opens a connection to a server running on port 1337 on the
* local machine. Sends 10 1024 Byte payloads to the server,
* measuring the time it takes to recieve them back.
* It uses this data to calculate the RTT between the applications.
*
******************************************************************************/
import java.io.*;
import java.net.*;
import java.util.Date;
public class P1Client
{
/* Instance Variables */
private static final String exitSeq = "QUIT";
private static final String hostName = "localhost";
private static final int portNumber = 1337;
private static final int numPackets = 10;
private static final int packetSize = 1024;
private static Date startTime;
private static Date stopTime;
/**
* Method: generatePacket
* Purpose: This method will generate a String that is size bytes in
* length. This is assumed to be size bytes when transferred across
* the network.
*/
private static String generatePacket (int size)
{
String packet = new String();
int i = 0;
for (i=0; i<size; i++)
packet += "Z";
return packet;
}
/**
* Method: printTimingInfo
* Purpose: This method will take the start and stop time and print
* out all of the required statistics: totalTime, RTT, throughput.
*/
private static void printTimingInfo (Date startTime, Date stopTime)
{
long totalTime = (stopTime.getTime() - startTime.getTime());
double rtt = (double)totalTime / (double)numPackets;
System.out.printf ("Time for %d x %d B packets: %d ms\n",
numPackets, packetSize, totalTime);
System.out.printf ("RTT per packet: %.3f ms\n", rtt);
double _100Mbps = 100000000.0; /* bps */
double _1MB = 8388608.0; /* bit */
double transferTime = (rtt / 1000.0) + 1.0 / _100Mbps * _1MB;
double throughput = _1MB / transferTime;
System.out.printf ("Throughput: %d bits / sec\n", (int)throughput);
}
/**
* Method: main
* Purpose: This method sets up a network socket, connects to the
* P1Server instance, and sends and times the transfer times.
*/
public static void main (String[] args) throws IOException
{
Socket sendSocket = null;
PrintWriter out = null;
BufferedReader in = null;
/* Set up the sockets */
try
{
sendSocket = new Socket (hostName, portNumber);
out = new PrintWriter (sendSocket.getOutputStream(), true);
in = new BufferedReader (new InputStreamReader(
sendSocket.getInputStream()));
}
catch (UnknownHostException e)
{
System.err.printf ("Can't resolve hostname: %s\n", hostName);
System.exit(1);
}
catch (IOException e)
{
System.err.printf ("Couldn't get I/O for the connection to: %s\n", hostName);
System.exit(1);
}
String packet = generatePacket (packetSize);
String response;
int i = 0;
/* Start the timer */
startTime = new Date();
/* Send all of the packets, recieve all of the responses */
for (i=0; i<numPackets; i++)
{
out.println (packet);
response = in.readLine();
}
/* Stop the timer */
stopTime = new Date();
/* Calculate and print all timing info */
printTimingInfo(startTime, stopTime);
/* Cleanup */
out.close();
in.close();
sendSocket.close();
}
}