Demo Tugas 1 Pemrograman Jaringan

Khaela Fortunela 05111940000057


Kode Program main.py:


#!/usr/bin/env python3


import argparse

import socket

import glob

import time



def recvall(sock, length):

    data = b''

    while len(data) < length:

        more = sock.recv(length - len(data))

        if not more:

            raise EOFError('was expecting %d bytes but only received'

                           ' %d bytes before the socket closed'

                           % (length, len(data)))

        data += more

    return data



def server(interface, port):

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    sock.bind((interface, port))

    sock.listen(1)


    while True:

        print('Waiting to accept a new connection')

        sc, sockname = sock.accept()

        print('We have accepted a connection from', sockname)

        print('  Socket name:', sc.getsockname())

        print('  Socket peer:', sc.getpeername())

        len_msg = recvall(sc, 3)

        message = recvall(sc, int(len_msg))

        inp = repr(message)

        cmd = inp.split()


        if(cmd[0] == "ping"):

            print(cmd[0])

            print("pass")

            str = cmd[1:]

            pr = ' '.join(str)

            pr = "terima: " + pr

            sc.sendall(bytes(pr, encoding="utf-8"))


        elif(cmd[0] == "ls"):

            print(cmd[0])

            if(len(cmd) > 1):

                add = glob.glob(cmd[1])

            else:

                address = "/home/fortunela/tugasprogjar/tugas1/*"

                add = glob.glob(address)

            pr = ""

            for i in add:

                pr += i + '\n'

            sc.sendall(bytes(pr, encoding="utf-8"))


        elif(cmd[0] == "get"):

            print(cmd[0])

            f = open(cmd[1], "rb")

            b = f.read()

            print(len(b))

            f.close()


            b = open(cmd[1], "rb").read()

            s = cmd[1].split("/")

            x = n[0] + "/" + cmd[2]

            f = open(x, "wb+")

            b = repr(b)

            c = bytes(b, "ascii")

            f.write(c)

            f.close()


        elif(cmd[0] == "quit"):

            print(cmd[0])

            time.sleep(1)

            sc.close()


        else:

            print("unknown")



def client(host, port):

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    sock.connect((host, port))

    print('Client has been assigned socket name', sock.getsockname())

    inp = input("> ")

    msg = inp.encode()

    len_msg = b"%03d" % (len(msg),)

    msg = len_msg + msg

    sock.sendall(msg)


    reply = recvall(sock, 10)

    print(repr(reply))

    sock.close()



if __name__ == '__main__':

    choices = {'client': client, 'server': server}

    parser = argparse.ArgumentParser(description='Send and receive over TCP')

    parser.add_argument('role', choices=choices, help='which role to play')

    parser.add_argument('host', help='interface the server listens at;'

                        ' host the client sends to')

    parser.add_argument('-p', metavar='PORT', type=int, default=1060,

                        help='TCP port (default 1060)')

    args = parser.parse_args()

    function = choices[args.role]

    function(args.host, args.p)


Komentar

Postingan populer dari blog ini

Tugas 1 PBKK - Portofolio

Tugas 3 PBKK - Latihan WPF

Tugas 2 PBKK - Latihan Windows Forms App