//File: ABWPlot.java //Project: ABMT //Version: 0.1 //Designer: C. Edward Chow //Revision: // 2/14/2001 C. Edward Chow //Bug Report: send to chow@cs.uccs.edu //Description: Plotting Program for Internet Network Probing Research // Main class of ABWPlot // // copyright@2001, University of Colorado at Coloraod Springs // unlimited distribution for academic research and education // for commercial usage, please check with C. Edward Chow // import javax.swing.UIManager; import java.awt.*; import java.net.*; import java.io.*; public class ABWPlot { boolean packFrame = false; private DatagramSocket socket; private DatagramPacket receivePacket; private double time1; private boolean first; //Construct the application PlotProbingResults frame; public ABWPlot() { frame = new PlotProbingResults(0, 1E7, 0.1, 10); first = true; //Validate frames that have preset sizes //Pack frames that have useful preferred size info, e.g. from their layout if (packFrame) frame.pack(); else frame.validate(); //Center the window //Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); //Dimension frameSize = frame.getSize(); //if (frameSize.height > screenSize.height) // frameSize.height = screenSize.height; //if (frameSize.width > screenSize.width) // frameSize.width = screenSize.width; frame.setLocation(0,0); frame.setSize(680,700); frame.setVisible(true); try { socket = new DatagramSocket(9001); } catch (SocketException se) { se.printStackTrace(); System.exit(1); } System.out.println("socket created on port 9001"); } public double byte2double(byte[] r, int i, int length) { double d = 0.0; for (int j=i+length-1; j>=i; j--) { d *= 256; if (r[j] < 0) { d += r[j] + 256; } else { d += r[j]; } } return d; } public void waitForPackets() { double relativeTime; while (true) { // set up packet byte data[] = new byte[20]; receivePacket = new DatagramPacket(data, data.length); // wait for packet try { socket.receive(receivePacket); } catch (IOException io) { io.printStackTrace(); System.exit(1); } System.out.println("receive datagram"); byte[] r = receivePacket.getData(); for (int i = 0; i< 16; i++) { System.out.println("r["+i+"]="+r[i]); } int id = r[0]; // assume little endien // double time = (((r[7]*256+r[6])*256)+r[5])*256+r[4]+0.0; double time = byte2double(r, 4, 4); // time += ((((r[11]*256+r[10])*256)+r[9])*256+r[8])*0.000001; time += byte2double(r, 8, 4)*0.000001; if (first) { time1= time; relativeTime = 0.0; first = false; } else { if (time1 > time) { time1 = time; relativeTime = 0.0; } else { relativeTime = time - time1; //get relative time } } //double bw = (((r[15]*256+r[14])*256)+r[13])*256+r[12] +0.0; double bw = byte2double(r, 12, 4); System.out.println("id="+id+" time="+time+" relativeTime="+relativeTime+" bw="+bw); if (id == 1) { frame.c1.updateProbingData(relativeTime, bw); } if (id == 0) { frame.c1.updateABW(relativeTime, bw); } } } //Main method public static void main(String[] args) { try { //UIManager.setLookAndFeel(new com.sun.java.swing.plaf.windows.WindowsLookAndFeel()); //UIManager.setLookAndFeel(new com.sun.java.swing.plaf.motif.MotifLookAndFeel()); //UIManager.setLookAndFeel(new com.sun.java.swing.plaf.metal.MetalLookAndFeel()); } catch (Exception e) { } ABWPlot n = new ABWPlot(); n.waitForPackets(); /* int j=0; for (int i=0; i<1000000; i++) { n.frame.c1.updateProbingData(i, 1000000*Math.sin(i/10)+5000000); for (int k=0; k<100000; k++) { j++;}; n.frame.c1.updateABW(i, 1000000*Math.cos(0.1*i)+5000000); for (int k=0; k<100000; k++) { j++;}; n.frame.c1.updateABW2(i, 1000000*Math.cos(0.1*i)+4000000+1000000*Math.sin(0.1*i)); if (i%100 == 99) { n.frame.c1.redisplayPlot(0, 1E7, i-50, 5); } } */ } }