예제 #1
0
파일: gbn.py 프로젝트: liesgame/as_gbn_tcp
    def __init__(self, peer, N):
        """GBN sending-side

        :param peer: peer (hostname, port)
        :param N:    send window size
        """

        GBN.__init__(self, peer)
        self.N = N  # buffer size
        self.sndbuf = PacketBuffer(self.N)
        self.state = State.Wait
        self.base = Seq(0)
        self.next_seq = Seq(0)
예제 #2
0
파일: gbn.py 프로젝트: liesgame/as_gbn_tcp
    def __init__(self, peer, N):
        """GBN receiving-side

        :param peer: peer (hostname, port)
        :param N:    receive window size
        """

        GBN.__init__(self, peer)
        self.N = N  # buffer size
        self.rcvbuf = PacketBuffer(self.N)
        self.state = State.Wait
        self.base = Seq(0)
        self.FIN_delivered = False
def main():
    """Main"""
    next_no = 0
    exit_flag = False
    sin_port, sout_port, csin_port, file = checkCommandArgs()

    #sin socket
    sin = Server(IP, sin_port, BUFFER_SIZE)
    sin.accept()

    #sout socket
    sout = Client(IP, sout_port)
    sout.connect(IP, csin_port)

    open_file = File(file)
    buffer = PacketBuffer()

    sent = 0

    while (not exit_flag):
        data, data_len = open_file.readBytes()
        pack = Packet(DATA_PACKET, next_no, data_len, data)
        if data_len == 0:
            exit_flag = True
        buffer.onqueue(pack)
        while True:
            sout.send(pickle.dumps(buffer.peek()))
            sent += 1
            if not sin.receiveSecond(next_no):
                print("no responce or incorrect responce")
                continue
            print("response and checked")
            next_no += 1
            buffer.dequeue()
            break
    open_file.close()
    sout.shutdown()
    sin.close()
    sout.close()
    print("sent: " + str(sent))