0% found this document useful (0 votes)
9 views3 pages

Sliding Window

Uploaded by

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

Sliding Window

Uploaded by

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

import java.io.

*;

import java.net.*;

public class SlidingReceiver {

public static void main(String[] args) throws Exception {

DatagramSocket socket = new DatagramSocket(9876);

byte[] buffer = new byte[1024]; // Increased buffer size to receive packet data

int expectedPacket = 0; // Track the next expected packet

boolean[] receivedPackets = new boolean[256]; // Array to track received packets

while (true) {

DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

socket.receive(packet);

String receivedData = new String(packet.getData(), 0, packet.getLength());

// Split the received data into sequence number and character

String[] parts = receivedData.split(":");

int seqNum = Integer.parseInt(parts[0]) ; // Convert to 0-based index

char receivedChar = parts[1].charAt(0);

// Print received character and its sequence number

System.out.println("Received packet: " + receivedChar + " (Received Sequence Number: " +


seqNum + ")");

// Check if the packet was already received

if (!receivedPackets[seqNum]) {

receivedPackets[seqNum] = true; // Mark this packet as received

// Send ACK for the received packet

byte[] ackData = new byte[1];


ackData[0] = (byte) expectedPacket; // Acknowledgment number

DatagramPacket ackPacket = new DatagramPacket(ackData, ackData.length,


packet.getAddress(), packet.getPort());

socket.send(ackPacket);

System.out.println("Sent ACK: " + expectedPacket);

expectedPacket++; // Move to the next expected packet

} else {

System.out.println("Duplicate packet received: " + receivedChar);

import java.io.*;

import java.net.*;

public class SlidingSender {

public static void main(String[] args) throws Exception {

DatagramSocket socket = new DatagramSocket();

InetAddress receiverAddress = InetAddress.getByName("localhost");

int receiverPort = 9876;

int windowSize = 4;

String message = "Hello, Sliding Window!";

byte[] data = message.getBytes();

int base = 0;

boolean[] sentPackets = new boolean[data.length]; // Track sent packets

while (base < data.length) {

// Send packets in the current window

for (int i = base; i < base + windowSize && i < data.length; i++) {
if (!sentPackets[i]) { // Only send if not already sent

// Create a packet with sequence number and character

String packetData = i + ":" + (char) data[i]; // Sequence number:character

DatagramPacket packet = new DatagramPacket(packetData.getBytes(),


packetData.length(), receiverAddress, receiverPort);

socket.send(packet);

sentPackets[i] = true; // Mark this packet as sent

System.out.println("Sent packet: " + packetData);

// Wait for ACK

byte[] ackBuffer = new byte[1];

DatagramPacket ackPacket = new DatagramPacket(ackBuffer, ackBuffer.length);

socket.receive(ackPacket);

int ack = ackBuffer[0];

System.out.println("Received ACK: " + ack);

if (ack >= base) {

base = ack + 1; // Move the base forward

socket.close();

You might also like