Created
November 28, 2013 12:31
-
-
Save initrunlevel0/7691155 to your computer and use it in GitHub Desktop.
Tugas 1 Progjarnya Pak Wahyu
This file contains 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 os | |
from math import floor | |
from datetime import datetime | |
if(len(sys.argv) < 4): | |
print "python.py ./klien-getfile.py <address> <port> (get/ls) <path>" | |
else: | |
HOST = sys.argv[1] | |
PORT = int(sys.argv[2]) | |
FILE = sys.argv[4] | |
CMD = sys.argv[3] | |
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
s.connect((HOST, PORT)) | |
if(CMD == "get"): | |
# Get file size | |
#s.send('size ' + FILE + '\n') | |
#size_str = "" | |
#data = s.recv(1) | |
#while(data != "\n"): | |
#if(data == "E"): | |
# print "Error Happened" | |
# exit(1) | |
#size_str = size_str + data | |
#data = s.recv(1) | |
#size = int(size_str) | |
#print "Data file size is: " + str(size) | |
# Get file itself | |
s.send('get ' + FILE + '\n') | |
data = s.recv(1) | |
if(data == "E"): | |
print "Error Happened" | |
exit(1) | |
file_result = os.path.basename(FILE) | |
# Get Frame Number | |
framenum = "" | |
data = s.recv(1) | |
while (data!="\0"): | |
framenum = framenum + str(data) | |
data = s.recv(1) | |
framenum = int(framenum) | |
f = open(file_result, "wb") | |
startTime = datetime.now() | |
speedCount = 0 | |
velocity = framenum | |
velocityStart = datetime.now() | |
for x in range(0,framenum+1): | |
sys.stdout.write("\r[") | |
for y in range(0,int(floor((float(x)/framenum)*50))): | |
sys.stdout.write("#") | |
for y in range(0, 49 - int(floor(((float(x)/framenum)*50)))): | |
sys.stdout.write(" ") | |
sys.stdout.write("]") | |
if (datetime.now() - velocityStart).seconds >= 1: | |
velocityStart = datetime.now() | |
velocity = speedCount | |
speedCount = 0 | |
else: | |
speedCount = speedCount + 1 | |
# Get frame size for each frame | |
framesize = "" | |
data = s.recv(1) | |
while (data!="\0"): | |
framesize = framesize + str(data) | |
data = s.recv(1) | |
framesize = int(framesize) | |
data = s.recv(framesize) | |
f.write(data) | |
sys.stdout.write(" " + str(x) + " (" + str(velocity) + " fps)") | |
sys.stdout.write("\n") | |
print("Data saved on ./" + file_result + ". Thanks :)"); | |
f.close() | |
elif(CMD == "ls"): | |
s.send('ls ' + FILE + '\n') | |
data = s.recv(1) | |
while(data != "\0"): | |
if(data == "E"): | |
print "Error Happened" | |
exit(1) | |
sys.stdout.write(data) | |
data = s.recv(1) | |
s.close() |
This file contains 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
# Echo server program | |
import socket | |
import sys | |
import os | |
from thread import * | |
import math | |
#dir_to_use = "/home/wira" | |
CHUNKSIZE = 1024 | |
HOST = '' # Symbolic name meaning the local host | |
PORT = int(sys.argv[1]) | |
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | |
s.bind((HOST, PORT)) | |
s.listen(10) | |
# Client handling function | |
def clientthread(conn): | |
global dir_to_use; | |
while True: | |
input = conn.recv(1024) | |
input = input.splitlines()[0] | |
print("It sends us command: " + input) | |
try: | |
if(input.split()[0] == "ls"): | |
if(len(input.split()) == 2): | |
dir = os.listdir(input.split()[1]) | |
for item in dir: | |
conn.send(item + "\n") | |
conn.send("\0") | |
else: | |
conn.send("E240\n") | |
elif(input.split()[0] == "quit"): | |
conn.close() | |
elif(input.split()[0] == "get"): | |
if(len(input.split()) == 2): | |
try: | |
conn.send("S") | |
# Count frame number | |
framenum = int(math.ceil(os.path.getsize(input.split()[1]))/CHUNKSIZE) | |
conn.send(str(framenum) + "\0") | |
file = open(input.split()[1], "rb") | |
bytes_read = file.read(CHUNKSIZE) | |
while bytes_read: | |
size = len(bytes_read) | |
conn.send(str(size) + "\0" + bytes_read) | |
bytes_read = file.read(CHUNKSIZE) | |
file.close() | |
except IOError: | |
conn.send("E100\n") | |
else: | |
conn.send("E240\n") | |
#elif(input.split()[0] == "size"): | |
# if(len(input.split()) == 2): | |
# conn.send(str(os.path.getsize(input.split()[1])) + "\n") | |
except IOError: | |
conn.send("E000\n") | |
# Handle multi connection | |
while 1: | |
conn, addr = s.accept() | |
print 'Connected with ' + addr[0] + ':' + str(addr[1]) | |
start_new_thread(clientthread, (conn,)) | |
conn.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment