def receive():
    # Establish connection
    global buffer
    global bufferStatus
    global maxLen
    global gCounter
    sockRec = co.createSocket(co.portReceiverSend)
    c, addr = co.allowConn(sockRec)

    sockSend = co.createConn(co.portReceiverReceive)
    print('Connected to channel')

    # Connection established
    rn = 0
    while True:
        # Wait till frame received
        print(15 * '-')
        frame = sockSend.recv(1024).decode()
        print('Frame received ' + frame)

        if (frame != '#' and not isValid(
                frame, rn)):  # wrong frame no received send ack for prev
            print('Invalid frame.Not sending ack')
        elif (frame != '#'):
            ackno = frame[0:3]
            ackNo = int(ackno, 2)
            buffer[ackNo] = frame[3:7]
            bufferStatus[ackNo] = gCounter
            # Send an acknowledgement
            ack = co.generateAck_gbn(ackno)
            time.sleep(5)
            # Send the ack
            print('Sending ack ' + ack)
            co.send_frame(ack, c)
            print("DEBUG:", sum(bufferStatus), maxLen * gCounter)
            if (sum(bufferStatus) >= maxLen * gCounter):
                file = open("output.txt", "a")
                print("".join(buffer), end='', file=file)
                file.close()
                rn = (rn + 1) % (co.window_size + 1)
                buffer = co.window_size * ['']
                gCounter = gCounter + 1
        else:
            # For valid frame
            maxLen = maxLen - 1
            ack = '#'
            time.sleep(5)
            # Send the ack
            print('Sending ack ' + ack)
            co.send_frame(ack, c)
        print(str(bufferStatus))
        print(str(buffer))
        print(15 * '-')

    # Close the sockets
    sockSend.close()
    sockRec.close()
Exemple #2
0
def receive():
    # Establish connection
    sockRec = co.createSocket(co.portReceiverSend)
    c, addr = co.allowConn(sockRec)

    sockSend = co.createConn(co.portReceiverReceive)
    print('Connected to channel')

    # Connection established
    rn = 0
    while True:
        # Wait till frame received
        print(15 * '-')
        frame = sockSend.recv(1024).decode()

        print('Frame received ' + frame)

        if (frame == '#'):
            ack = '#'
        else:
            if (isValid(frame,
                        rn) == 0):  # wrong frame no received send ack for prev
                print('Invalid frame')
                print('Sending ack for previous frame')
                ackno = (rn) % 2

            elif (isValid(frame, rn) == 1):
                print('Error in frame')
                continue

            else:  # Valid frame
                ackno = (rn + 1) % 2

            # For valid data frame
            rn = (rn + 1) % 2
            # Send an acknowledgement
            ack = co.generateAck(ackno)
        # Send the ack
        print('Sending ack ' + ack)
        co.send_frame(ack, c)

        if (frame == '#'):  # Means end frame
            break
        print(15 * '-')

    # Close the sockets
    sockSend.close()
    sockRec.close()
Exemple #3
0
def send_all(list_of_frames):
    sockSend = co.createSocket(
        co.portSenderSend)  # sender socket to send data to channel
    c, addr = co.allowConn(sockSend)

    sockRec = co.createConn(
        co.portSenderReceive)  # Socket to receive data from channel
    sockRec.settimeout(timeoutTime)

    print('Connected to channel')
    # implementing stop and wait arq
    sn = 0
    i = 0
    while (i < (len(list_of_frames))):  # While there are frames send
        print(15 * '-')
        canSend = True
        sn = (i) % 2
        stored_frame = list_of_frames[i]
        if (stored_frame != '#'):
            stored_frame = co.prepare_frame(list_of_frames[i], sn)
        print('Sending frame ' + str(i) + ' ' + stored_frame)
        co.send_frame(stored_frame, c)
        canSend = False

        try:
            ack = sockRec.recv(1024).decode()
        except Exception as e:
            # Resend so repeat this iteration of loop
            print('Timeout.. Resending')
            continue

        if (ack == '#'):
            break
        print('Ack received ' + ack)
        if (ack and isValid(ack, sn)):  # Wrong acknowledgement
            print('Correct ack received')
            canSend = True
            i = i + 1
        elif (not isValid(ack, sn)):
            # invalid ack so resend
            print('Wrong ack.. resending')

        print(15 * '-')

    # Close the sockets
    sockSend.close()
    sockRec.close()
import common as co
import random
import time
import threading

probas = 10
randSendF = 2  # Random probability of sending frame or not
randSendAck = 2
randErrF = -1
randErrAck = -1

# **************** SENDER *****************************
sockSenderReceive = co.createConn(
    co.portSenderSend)  # Socket to receive data from sender

sockSenderSend = co.createSocket(
    co.portSenderReceive)  # Socket to send data to sender
senderSend, addr = co.allowConn(sockSenderSend)
print('Channel connected to sender')
#*******************************************************

#****************** RECEIVER **************************
sockReceiverReceive = co.createConn(
    co.portReceiverSend)  # Socket to receive data from receiver
# sockReceiverReceive.settimeout(11)

sockReceiverSend = co.createSocket(
    co.portReceiverReceive)  # Socket to send data to receiver
receiverSend, addr = co.allowConn(sockReceiverSend)
print('Channel connected to receiver')
#*******************************************************
Exemple #5
0
                if (self.mode == 'guest'
                        and self.username != reqs['username']):
                    res.append('Access Denied')
                elif (self.username == reqs['username']
                      or self.mode == 'admin'):

                    if (reqs['username'] in global_dict):
                        res.append(global_dict[reqs['username']]._getValue(
                            reqs['key']))
                    else:
                        res.append('Invalid username')

        return res


sockServer = co.createSocket(co.portServer)
global_dict = {}


# Function to service a client
def serviceClient(client, clientAddr):

    while True:

        requestC = clientAddr.recv(1024)  # Receive the request dictionary
        requestC = pickle.loads(requestC)
        res = client.takeAction(requestC)
        res = pickle.dumps(res)
        clientAddr.sendall(res)

Exemple #6
0
    receiveThread.join()

    # Close the sockets
    sockSend.close()
    sockRec.close()


timeoutTime = 17
frame_size = 4
sw = co.window_size
sf = 0
sn = 0
# stored_buffer=[ '' for i in range(sw)]
stored_buffer = {i: '' for i in range(sw)}

print('Demonstrating Go Back N ARQ')
list_of_frames = co.readfile('input.txt', frame_size)
print(list_of_frames)
list_of_frames.append('#')  # Attach a blank frame

sockSend = co.createSocket(
    co.portSenderSend)  # sender socket to send data to channel
sender, addr = co.allowConn(sockSend)

sockRec = co.createConn(
    co.portSenderReceive)  # Socket to receive data from channel
sockRec.settimeout(timeoutTime)

print('Connected to channel')

send_all(list_of_frames)
Exemple #7
0
import socket
import threading
import common as co
import time

# shared_buffer=[]
sockSenderRec = co.createSocket(co.portSenderReceive)
sockSenderSignal = co.createSocket(co.portSenderSignal)
sockReceiverSend = co.createSocket(co.portReceiverSend)

threadLock = threading.Lock()


def allow_new_conn():
    sockReceiverSend.listen(5)
    receive, addrrec = sockReceiverSend.accept()

    recThread = threading.Thread(target=send_to_receiver, args=[receive])
    recThread.start()

    while (True):
        # Wait for a connection
        sockSenderRec.listen(5)
        c, addr = sockSenderRec.accept()
        print('Connected to sender')

        sockSenderSignal.listen(5)
        signal, addrsignal = sockSenderSignal.accept()

        # Start a new thread for the sender
        sendThread = threading.Thread(target=receive_from_sender,
Exemple #8
0
import socket
import threading
import common as co
import time

# shared_buffer=[]
s_sendrec = co.createSocket(co.port_sendrec)
s_sendsignal = co.createSocket(co.port_sendsignal)
s_recsend = co.createSocket(co.port_recsend)


def new_con():
    s_recsend.listen(5)
    receive, addrrec = s_recsend.accept()

    recThread = threading.Thread(target=send_to_receiver, args=[receive])
    recThread.start()

    while (True):
        # Wait for a connection
        s_sendrec.listen(5)
        c, addr = s_sendrec.accept()
        print('Sender is connected...')

        s_sendsignal.listen(5)
        signal, addrsignal = s_sendsignal.accept()

        # Start a new thread for the sender
        sendThread = threading.Thread(target=receive_from_sender,
                                      args=[c, addr])
        sendThread.start()
Exemple #9
0
                elif (self.username == reqs['username']
                      or self.mode == 'manager'):

                    if (reqs['username'] in global_dict):
                        res.append(global_dict[reqs['username']]._getValue(
                            reqs['key']))
                    else:
                        res.append('Invalid username')
            elif (reqs['method'].lower() == 'exit'):
                #print(self.username+': Exited')
                res.append('End')
        return res


port_no = input('Enter the port number: ')
sockServer = co.createSocket(int(port_no))
global_dict = {}


# Function to service a client
def serviceClient(client, clientAddr, uname):

    while True:

        requestC = clientAddr.recv(1024)  # Receive the request dictionary
        requestC = pickle.loads(requestC)
        res = client.takeAction(requestC)
        if (res[0] == 'End'):
            del global_dict[uname]
            print(uname + ': Exited')
            break