0% found this document useful (0 votes)
62 views5 pages

DCCN Lab 2

The document describes a program to implement a stop-and-wait protocol for data transmission between a sender and receiver. The sender splits data into packets, sends each packet sequentially and waits for an acknowledgment before sending the next. The receiver receives packets, sends acknowledgments, and reassembles the full data. The program establishes a connection between the nodes, exchanges data packets and acknowledgments, and ends the connection once all data is transferred.

Uploaded by

Pragallath PS
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
62 views5 pages

DCCN Lab 2

The document describes a program to implement a stop-and-wait protocol for data transmission between a sender and receiver. The sender splits data into packets, sends each packet sequentially and waits for an acknowledgment before sending the next. The receiver receives packets, sends acknowledgments, and reassembles the full data. The program establishes a connection between the nodes, exchanges data packets and acknowledgments, and ends the connection once all data is transferred.

Uploaded by

Pragallath PS
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

Department of Computer Science and Engineering 18PD15- Data Communication and

Computer Networks

EX NO : 3
IMPLEMENTATION OF STOP AND WAIT PROTOCOL
DATE :

Aim:
To write a program to perform stop and wait protocol.

Algorithm:
Sender:
Step 1:Start the Program
Step1:Set sequence = 0
Step2: Accept new packet and assign sequence to it.
Step3: Send packet sequence with sequence number sequence.
Step4: Set timer for recently sent packets.
Step5: If error free acknowledgment from receiver and Next Frame Expected ->sequence
then sequence->Next Frame Expected.
Step6: If time out then go to step3.
Step7: Stop.
Receiver
Step1: Start the Program
Step2: Next Frame Expected= 0, repeat steps 3 forever.
Step3: If error-free frame received and sequence-> Next Frame Expected, then pass packet to
higher layer and Next Frame Expected-> NextFrameExpected+1(modulo 2).
Step4: Stop the program.

Program:

Sender

import java.io.*;
import java.net.*;
public class Sender{
    Socket sender;
    ObjectOutputStream out;
    ObjectInputStream in;
    String packet,ack,str, msg;
    int n,i=0,sequence=0;
    Sender(){}
Department of Computer Science and Engineering 18PD15- Data Communication and
Computer Networks

    public void run(){


        try{
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Waiting for Connection....");
            sender = new Socket("localhost",2004);
            sequence=0;
            out=new ObjectOutputStream(sender.getOutputStream());
            out.flush();
            in=new ObjectInputStream(sender.getInputStream());
            str=(String)in.readObject();
            System.out.println("reciver    > "+str);
            System.out.println("Enter the data to send....");
            packet=br.readLine();
            n=packet.length();
            
            do{
                try{
                    if(i<n){
                        msg=String.valueOf(sequence);
                        msg=msg.concat(packet.substring(i,i+1));
                    }
                    else if(i==n){
                        msg="end";out.writeObject(msg);break;
                    }
                    out.writeObject(msg);
                    /*
                        chenging sequence number since data sent
                    */
                    sequence=(sequence==0)?1:0;
                    out.flush();
                    System.out.println("data sent>"+msg);
                    ack=(String)in.readObject();
                    System.out.println("waiting for ack.....\n\n");
                    if(ack.equals(String.valueOf(sequence))){
                        i++;
                        System.out.println("receiver    >  "+" packet recieved\n\n");
                    }
                    else{      /* whenever ack lost or wrong ack we change the sequence number
                                */
                        System.out.println("Time out resending data....\n\n");
                        sequence=(sequence==0)?1:0;
                    }
                }catch(Exception e){}
            }while(i<n+1);
            System.out.println("All data sent. exiting.");
        }catch(Exception e){}
        finally{
            try{
                in.close();
                out.close();
Department of Computer Science and Engineering 18PD15- Data Communication and
Computer Networks

                sender.close();


            }catch(Exception e){}
        }
    }
    public static void main(String args[]){
        Sender s=new Sender();
            s.run();
    }
}

Reciever

import java.io.*;
import java.net.*;
public class Reciever{
    ServerSocket reciever;
    Socket connection=null;
    ObjectOutputStream out;
    ObjectInputStream in;
    String packet,ack,data="";
    int i=0,sequence=0;
    Reciever(){}
    public void run(){
        try{
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            reciever = new ServerSocket(2004,10);
            System.out.println("waiting for connection...");
            connection=reciever.accept();
            sequence=0;
            System.out.println("Connection established     :");
            
                out=new ObjectOutputStream(connection.getOutputStream());
                out.flush();
                in=new ObjectInputStream(connection.getInputStream());
                out.writeObject("connected    .");
            do{
                try{
                    packet=(String)in.readObject();
                    if(Integer.valueOf(packet.substring(0,1))==sequence){
                        data+=packet.substring(1);
                        sequence=(sequence==0)?1:0;
                        System.out.println("\n\nreceiver    >"+packet);
                    }else{
                        System.out.println("\n\nreceiver    >"+packet +"   duplicate data");
                    }
                    /*
                        when i==3 then i destroy the ack
                    */
                    if(i<3){
                        out.writeObject(String.valueOf(sequence));i++;
Department of Computer Science and Engineering 18PD15- Data Communication and
Computer Networks

                    }else{


                        out.writeObject(String.valueOf((sequence+1)%2));i=0;
                    }
                }catch(Exception e){}
            }while(!packet.equals("end"));
            System.out.println("Data recived="+data);
            out.writeObject("connection ended    .");
        }catch(Exception e){}
        finally{
            try{
                in.close();
                out.close();
                reciever.close();
            }catch(Exception e){}
        }
    }
    public static void main(String args[]){
        Reciever s=new Reciever();
        while(true){
            s.run();
        }
    }
}

Output:
Department of Computer Science and Engineering 18PD15- Data Communication and
Computer Networks

Result:
Thus the set of two nodes connection using NS2 is Implemented.

You might also like