Skip to content

Instantly share code, notes, and snippets.

@initrunlevel0
Created November 28, 2013 12:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save initrunlevel0/7691155 to your computer and use it in GitHub Desktop.
Save initrunlevel0/7691155 to your computer and use it in GitHub Desktop.
Tugas 1 Progjarnya Pak Wahyu
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()
# 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