Anda di halaman 1dari 6

Nama : Hasna Lathifah P

NRP : 5025201108

Kelas : Progjar B

I. Penjelasan singkat
- Deskripsi program
Program yang dibuat adalah sepasang aplikasi server-client yang mengakomodir CHAT dan
terhubung sebagai klien FTP. Di dalamnya terdapat fitur utama yaitu untuk chat ke semua
anggota grup. Selain itu terdapat fitur – fitur tambahan seperti :
LIST : menampilkan daftar file di FTP
PWD : menampilkan present working directory di FTP
CD : pindah ke direktori di FTP, contoh : CD .. Untuk naik, atau CD temp Untuk masuk temp
MKDIR : membuat direktori baru
SENDALL : download file dan mengirim sebuah file ke semua anggota chat lainnya
- Daftar fitur yang berhasil, tidak berhasil, dan belum dikerjakan
No Fitur Status Keterangan
1 Chat biasa Berhasil Berfungsi dengan baik
2 LIST Berhasil Berfungsi dengan baik
3 PWD Berhasil Berfungsi dengan baik
4 CD Berhasil Berfungsi dengan baik
5 MKDIR Berhasil Berfungsi dengan baik
6 SENDALL Belum dikerjakan Waktu tidak cukup

II. Source code dan dokumentasi


Berikut ini adalah source code dari file client dan server beserta penjelasan singkat dalam comment
- File client.py

import socket
import select
import sys
from threading import Thread
from ftplib import FTP
f = FTP('localhost')

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


ip_address = '127.0.0.1'
port = 8081
server.connect((ip_address, port))

# login ke FTP
print('please enter username :')
user = input('>> ')
f.login(user)

print('welcome to the chat group!')


print("FTP command list :\nLIST = list of directory\nMKDIR = Make new
directory\nPWD = Present working directory\nCD = change directory\nSENDALL =
send file to group chat")

def send_msg(sock):
while True:
comm = input(">> ")
# memisahkan antara command dengan nama directory/file
data = comm.split(' ')
# fitur LIST
if data[0] == 'LIST':
names = f.nlst()
print('list of directory: ' + str(names))
# fitur membuat directory baru
elif data[0] == 'MKDIR':
print(data[1])
name = data[1]
ftpResponse = f.mkd(str(name))
print(ftpResponse)
# fitur present working directory
elif data[0] == 'PWD':
print('current working directory' + f.pwd())
# fitur pindah directory
elif data[0] == 'CD':
print(data[1])
name = data[1]
ftpResponse = f.cwd(str(name))
print(ftpResponse)
# fitur kirim file (belum selesai)
elif data[0] == "SENDALL" :
namefile = data[1]
fd = open(str(namefile), 'wb')
f.retrbinary('RETR ' + str(namefile), fd.write, 1024)
f = open(namefile, "rb")
data = f.read(1024)
while(data):
if(sock.sendto(data, (server))):
data = f.read(1024)
sock.close()
f.close()
elif data[0] == 'QUIT':
break
# pesan selain fitur untuk dikirim ke grup chat
else :
sock.send(comm.encode())
print('<You>'+ comm)
sys.stdout.flush()
f.quit()
server.close()

def recv_msg(sock):
while True:
data = sock.recv(2048)
print("\n")
print(data.decode())

Thread(target=send_msg, args=(server,)).start()
Thread(target=recv_msg, args=(server,)).start()

while True:
socket_list = [server]
read_socket, write_socket, error_socket = select.select(socket_list, [],
[])
for socks in read_socket:
if socks == server:
recv_msg(socks)
else:
send_msg(socks)

server.close()

- File server.py

import socket
import select
import sys
import threading

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


server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
ip_address = '127.0.0.1'
port = 8081
server.bind((ip_address, port))
server.listen(100)
list_of_clients =[]
def clientthread(conn, addr) :
while True:
try:
message = conn.recv(2048).decode()
if message:
if message:
print('<' + addr[0] + '>' + message)
message_to_send = '<' + addr[0] + '>' + message
broadcast(message_to_send, conn)
else:
remove(conn)
except:
continue

def broadcast(message, connection):


for clients in list_of_clients:
if clients != connection:
try:
clients.send(message.encode())
except:
clients.close()
remove(clients)

def remove(connection):
if connection in list_of_clients:
list_of_clients.remove(connection)

while True:
conn, addr = server.accept()
list_of_clients.append(conn)
print(addr[0] + 'connected')
threading.Thread(target=clientthread, args=(conn, addr)).start()

conn.close()

III. Teknis Pengoperasian


1. Run code server
2. buka terminal baru kemudian run code client
3. login ke FTP untuk username client 1
4. buka 2 terminal baru lagi, masing-masing run code client, lalu login ke FTP untuk client 2 dan 3
5. Mencoba fitur chat grup biasa
Client 1 :

Client 2 :

Client 3 :

6. Mencoba fitur LIST

Anda mungkin juga menyukai