Last active
October 7, 2017 07:40
-
-
Save vincentius15/cc56595c38ce9ad67e4071ecf64eb002 to your computer and use it in GitHub Desktop.
Tugas Pemrograman Jaringan File Transfer Protocol
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import socket | |
import sys | |
import time | |
# Inisialisasi Create a TCP/IP socket | |
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
#Koneksi | |
server_address = ('localhost', 14000) | |
print >>sys.stderr, 'connecting to %s port %s' % server_address | |
client_socket.connect(server_address) | |
client_socket.setblocking(0) | |
usercmd = raw_input("") | |
cmd, src_path, dest_path = usercmd.split(" ") | |
client_socket.send(usercmd) | |
message = "" | |
if(cmd=="UPLOAD") : | |
try: | |
f = open(src_path, "rb") | |
message = f.read(512) | |
print message | |
while (message): | |
# print 'message yang akan dikirim ', message | |
client_socket.send(message) | |
message = f.read(512) | |
finally: | |
f.close() | |
print >> sys.stderr, 'closing socket' | |
client_socket.close() | |
elif(cmd=="DOWNLOAD") : | |
try: | |
f = open(dest_path, "wb") | |
flag = 0 | |
while True: | |
try : | |
message = client_socket.recv(512) | |
while(message): | |
#print message + "\r\n\r\n" | |
f.write(message) | |
flag = 1 | |
message = client_socket.recv(512) | |
except : | |
time.sleep(0.5) | |
if (len(message) < 512 and flag == 1): | |
break | |
finally: | |
f.close() | |
print >> sys.stderr, 'closing socket' | |
client_socket.close() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DOWNLOAD /home/user/Desktop/1.pdf /home/user/Documents/1.pdf | |
UPLOAD /home/user/Desktop/1.pdf /home/user/Documents/1.pdf |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
import socket | |
from threading import Thread | |
def proses_upload(input) : | |
try : | |
cmd, src_path, dest_path = input.split(" ") | |
f = open(dest_path, "wb") | |
data = socket_si_client.recv(512) | |
while (data): | |
f.write(data) | |
data = socket_si_client.recv(512) | |
f.close() | |
return 1 | |
except : | |
return 0 | |
finally : | |
f.close() | |
def proses_download(input) : | |
try : | |
cmd, src_path, dest_path = input.split(" ") | |
f = open(src_path, "rb") | |
data = f.read(512) | |
print data | |
while (data): | |
socket_si_client.sendall(data) | |
data = f.read(512) | |
f.close() | |
return 1 | |
except : | |
return 0 | |
finally : | |
f.close() | |
def status_check(hasil) : | |
if (hasil == 1): | |
print "Transfer successful\r\n" | |
elif (hasil == 0): | |
print "Transfer failed\r\n" | |
else: | |
print "Unknown error\r\n" | |
def handle_client(socket_si_client, client_address): | |
print "Koneksi dari %s \r\n" % (str(client_address)) | |
pesan_dari_client = "" | |
while True: | |
data = socket_si_client.recv(128) | |
if not data: | |
print "socket diclose paksa\r\n" | |
break | |
pesan_dari_client = pesan_dari_client + data | |
if pesan_dari_client.startswith("UPLOAD"): | |
hasil = proses_upload(pesan_dari_client) | |
status_check(hasil) | |
pesan_dari_client = '' | |
elif pesan_dari_client.startswith("DOWNLOAD"): | |
hasil = proses_download(pesan_dari_client) | |
status_check(hasil) | |
pesan_dari_client = '' | |
# Create a TCP/IP socket | |
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
# Bind the socket to the port | |
server_address = ('localhost', 14000) | |
print >>sys.stderr, 'starting up on %s port %s' % server_address | |
sock.bind(server_address) | |
# Listen for incoming connections | |
sock.listen(1) | |
#Wait for a connection | |
while True: | |
print >>sys.stderr, 'waiting for a connection' | |
socket_si_client, client_address = sock.accept() | |
print >>sys.stderr, 'connection from', client_address | |
client_process = Thread(target=handle_client,args=(socket_si_client,client_address,)) | |
client_process.start() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment