Translate To Preferred Language

Search ObiokusThoughts

Please Read Today's Featured Post

Alliteration Ere Zeitgeist

Actually ask archaic adult Broadband boy baked bad batch Cold case cant consistently catch Dawn developed dusk do-over Enact emerge...

Template for Port Communication Protocol in Java (some bugs may occur)

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package cosc635_p2;

import java.awt.*;
import static java.awt.Frame.MAXIMIZED_BOTH;
import java.io.*;
//import static java.lang.System.exit;
import java.net.*;
import java.util.*;
import javax.swing.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

/**
 *
 * @author obobotette0
 */
public class COSC635_P2 {

    /**
     * @param args the command line arguments
     * @throws java.io.FileNotFoundException
     * @throws java.net.UnknownHostException
     * @throws java.net.SocketException
     * @throws java.lang.InterruptedException
     */
    public static void main(String[] args) throws FileNotFoundException, IOException, SocketException, InterruptedException, IllegalArgumentException, UnknownHostException {
        // TODO code application logic here

        //create variables
        String inFile = new String();
        String netadd = "\\10.20.101.99";      
        inFile = "..\\COSC635_P2\\src\\cosc635_p2\\COSC635_P2_DataSent.txt";
        String outFile = new String();
        outFile = "..\\COSC635_P2\\src\\cosc635_p2\\COSC635_P2_DataReceived.txt";
        String outfile2 = new String();
        outfile2 = "..\\COSC635_P2\\src\\cosc635_p2\\COSC635_P2_DataRecieved0.txt";
        String seed = JOptionPane.showInputDialog("Enter a number between 0 and 99");
        int randnum = Integer.valueOf(seed);
        Random error = new Random(System.currentTimeMillis());
        int ploss = 0;
        double packets = 0;
        double window = 0;
        double start = 0;
        String data = new String();
        String ack = new String("Send More");
        InetAddress serv = InetAddress.getLocalHost();
        //System.out.println(serv.getHostAddress() + " " + serv.getHostName() + " " + serv.toString());
        //System.out.println("CC277-86622/10.20.101.99");
        InetAddress cl = InetAddress.getByName("");//getByName(netadd);
        SocketAddress cl1 = new InetSocketAddress("CC277-86622/10.20.101.99", 02);

        //Create socket from arbitrary port and local IP
        DatagramSocket server = new DatagramSocket(01, serv);
        //System.out.println(server.getInetAddress() + " " + server.getLocalAddress());
        //System.out.println(server.getLocalSocketAddress() + " " + server.getRemoteSocketAddress());
        DatagramSocket client = new DatagramSocket(02, serv);

        //Connect server and client
        server.connect(client.getLocalSocketAddress());
        client.connect(server.getLocalSocketAddress());

        //Prompt user for protocol
        String protocol = JOptionPane.showInputDialog("Using SAW or GBN");
        protocol = protocol.toUpperCase();

        //Read text file
        File input = new File(inFile);
        Scanner read = new Scanner(input);

        //Prepare written file
        File dir = new File(outfile2);
        //dir.mkdir();
        FileWriter output = new FileWriter(outFile);
        PrintWriter write = new PrintWriter(output);

        //System.out.println(data.length+" "+ new String(data));
        if (Integer.valueOf(seed) >= 0 && Integer.valueOf(seed) <= 99) {
            if (protocol.matches("SAW")) {
                //Start transmission timer
                start = System.currentTimeMillis();
                //Read file line by line
                while (read.hasNextLine()) {
                    //check condition for packet loss
                    error = new Random(System.currentTimeMillis());
                    int percent = error.nextInt(99);
                    data = read.nextLine();
                    //Convert data to bytes for packet
                    DatagramPacket packet1 = new DatagramPacket(data.getBytes(), data.getBytes().length);
                    packets++;
                    if (percent >= randnum) {
                        //packets++;
                        server.send(packet1);
                    } else {
                        ploss++;
                        server.send(packet1);
                        packets++;
                    }
                    client.receive(packet1);
                    //write to file from packet
                    write.append(new String(packet1.getData()));
                    write.println();

                    //check condition for packet loss
                    error = new Random(System.currentTimeMillis());
                    percent = error.nextInt(99);
                    //Send acknowledgement
                    DatagramPacket packet2 = new DatagramPacket(ack.getBytes(), ack.getBytes().length);
                    //Count packets
                    packets++;

                    //if number is less than user inpur
                    //use division to produce an error rate
                    if (percent >= randnum) {

                        client.send(packet2);
                    } else {
                        ploss++;
                        client.send(packet2);
                        packets++;
                    }
                    server.receive(packet2);

                }
                //Stop timer, close file and print results              
                double stop = System.currentTimeMillis();
                read.close();
                write.println();
                write.println("Total transmission time was " + (stop - start) + " milliseconds.");
                write.println(ploss + " packets lost of " + packets + " packets sent for " + (ploss / packets) * 100 + "% of the packets loss during transmission.");
                write.flush();
                JFrame show = new JFrame();
                String newline = new String(" \t\n ");
                String time = new String("Total transmission time was " + (stop - start) + " milliseconds.");
                String stat = new String(ploss + " packets lost of " + packets + " packets sent for " + (ploss / packets) * 100 + "% of the packets loss during transmission.");
                JLabel print = new JLabel(time + newline + stat);
                show.setTitle("Reporting");
                show.add(print);
                show.validate();
                show.setSize(500, 500);
                show.setLocationRelativeTo(null);
                show.pack();
                show.setVisible(true);
                show.setDefaultCloseOperation(EXIT_ON_CLOSE);
            } else if (protocol.matches("GBN")) {
                String goback = JOptionPane.showInputDialog("How many frames will be sent at a time?");
                int loop = Integer.valueOf(goback);
                String data1[] = new String[loop];
                DatagramPacket packet1[] = new DatagramPacket[loop];
                start = System.currentTimeMillis();

                do {//read file by iterations entered by user
                    data = read.nextLine();
                    //System.out.println(data);
                    for (int i = 0; i < loop; i++) {
                        if (i == 0) {
                            //check condition for packet loss
                            error = new Random(System.currentTimeMillis());
                            int percent = error.nextInt(99);

                            data1[i] = data;
                            //Convert line to bytes for packet
                            packet1[i] = new DatagramPacket(data1[i].getBytes(), data1[i].getBytes().length);

                            //count packets
                            packets++;

                            //if number is less than user inpur
                            //use division to produce an error rate
                            if (percent >= randnum) {

                                server.send(packet1[i]);
                                client.receive(packet1[i]);
                            } else {
                                //read.reset();
                                i = -1;
                                ploss++;
                                packets++;

                            }
                        } else if (i > 0 && read.hasNextLine()) {
                            //check condition for packet loss
                            error = new Random(System.currentTimeMillis());
                            data1[i] = read.nextLine();
                            //Convert line to bytes for packet
                            packet1[i] = new DatagramPacket(data1[i].getBytes(), data1[i].getBytes().length);
                            int percent = error.nextInt(99);

                            //count packets
                            packets++;

                            //if number is less than user inpur
                            //use division to produce an error rate
                            if (percent >= randnum) {

                                server.send(packet1[i]);
                                client.receive(packet1[i]);
                            } else {
                                i = -1;
                                ploss++;
                                packets++;

                            }

                        }

                    }
                    for (int j = 0; j < loop; j++) {
                        //write to file from packet
                        write.append(new String (packet1[j].getData()));
                        write.println();

                    }
                    error = new Random(System.currentTimeMillis());
                    int percent = error.nextInt(99);
                    DatagramPacket packet2 = new DatagramPacket(ack.getBytes(), ack.getBytes().length);
                    packets++;
                    if (percent >= randnum) {

                        client.send(packet2);
                        server.receive(packet2);
                    } else {
                        ploss++;
                        client.send(packet2);
                        server.receive(packet2);
                        packets++;
                    }

                    //Count frames
                    window++;
                } while (read.hasNextLine());
                //Stop timer, close file and print results
                double stop = System.currentTimeMillis();
                read.close();
                write.println();
                write.println("Total transmission time was " + (stop - start) + " milliseconds for " + window + " frames.");
                write.println(ploss + " packets lost of " + packets + " packets sent for " + (ploss / packets) * 100 + "% of the packets loss during transmission.");
                write.flush();
                JFrame show = new JFrame();
                String newline = new String(" \t\n ");
                String time = new String("Total transmission time was " + (stop - start) + " milliseconds for " + window + " frames.");
                String stat = new String(ploss + " packets lost of " + packets + " packets sent for " + (ploss / packets) * 100 + "% of the packets loss during transmission.");
                JLabel print = new JLabel(time + newline + stat);
                show.setTitle("Reporting");
                show.add(print);
                show.validate();
                show.setSize(500, 500);
                show.setLocationRelativeTo(null);
                show.pack();
                show.setVisible(true);
                show.setDefaultCloseOperation(EXIT_ON_CLOSE);
            } else {
                System.out.println("Error from User Input");
                System.exit(1);
            }

        } else {
            System.out.println("Error from User Input");
            System.exit(1);
        }

    }
}


No comments:

Post a Comment

Thank you for reading.
Please share your thoughts.
Be blessed and enjoy life!