Guest User

Untitled

a guest
Dec 21st, 2017
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.14 KB | None | 0 0
  1. """
  2. ** POJEKAT : predmet Računarske mreže i telekomunikacije
  3. ** NAZIV : Klijent
  4. ** OPIS : Klijentska strana aplikacije koja je namenjena
  5. ** za jednostavnu razmenu fajlova između servera
  6. ** i klijenta. Vrši se prikaz glavnog menija. Omogućeno
  7. ** je klijentu da vrši registraciju, log in.
  8. ** Klijentu je takođe omogućeno da izadje u bilo kom trenutku.
  9. ** Klijenti koji su ulogovani mogu dobiti spisak do tada uploadovanih
  10. ** fajlova.
  11. **
  12. **
  13. **
  14. **
  15. ** DATUM: 21.12.2017.
  16. **
  17. ** Copyright (C) Miloš Nikić, 2017.
  18. """
  19.  
  20. import socket
  21.  
  22.  
  23. """
  24. Koristimo globalnu varijablu id koja će nam omogućiti
  25. da lakše vodimo računa o ulgovanim korisnicima
  26. Ona je svaki put kada neko nije ulogovana jednaka praznom
  27. stringu
  28. """
  29. id = ""
  30.  
  31. """
  32. Registracija novih korisnika
  33. """
  34.  
  35. def add_new_user(s):
  36. global id
  37. username = input("Unesite novo korisnicko ime: ")
  38. s.send(username.encode('ascii'))
  39. response = s.recv(1024)
  40. while response.decode('ascii')[0:3] == "ERR":
  41. print("Vec postoji korisnik sa {} nazivom!".format(username))
  42. username = input("Unesite neko drugo korisnicko ime: ")
  43. s.send(username.encode('ascii'))
  44. response = s.recv(1024)
  45.  
  46. password = input("Unesite novu lozinku: ")
  47. s.send(password.encode('ascii'))
  48. response = s.recv(1024)
  49. while response.decode('ascii')[0:3] == "ERR":
  50. password = input("Unesite neku drugu lozinku: ")
  51. s.send(password.encode('ascii'))
  52. response = s.recv(1024)
  53. print("Uspesno izvrsena registracija!")
  54. id = username
  55.  
  56. """
  57. Preuzimanje fajlova
  58. """
  59.  
  60. def download(s):
  61. code = input("Unesite kod zeljenog fajla za download['q' za prekid]: ")
  62.  
  63. while len(code) != 10:
  64. if code == 'q':
  65. s.send('q'.encode('ascii'))
  66. return
  67. code = input("Unesite validan kod: ")
  68.  
  69. s.send(code.encode())
  70. response = s.recv(1024)
  71. if response.decode('ascii') == "ERR":
  72. print("Dati fajl je nepostojeci.")
  73. #vratiti na interfejs pocetak
  74. #inace skinuti fajl
  75. else:
  76. with open('files/'+ code,'wb') as f:
  77. f.write(response)
  78. print("Uspesno preuzet {} fajl!".format(code))
  79.  
  80. """
  81. Funkcija za upload novog fajla
  82. """
  83.  
  84. def upload(s):
  85. global id
  86. text = input("Unesite zeljeni tekst: ")
  87. while len(text) > 500:
  88. print("Uneti tekst sadrzi vise od 500 karaktera\n"\
  89. "Nastavak teksta ce biti odsecen\n"\
  90. "Ukoliko zelite da potvrdite i izvrsite upload unesite 'p'\n"\
  91. "Ukoliko ne zelite unesite 'q':")
  92. opcija = input()
  93. if opcija[:1] == 'p':
  94. text = text[0:500]
  95. elif opcija[:1] == 'q':
  96. text = input("Unesite zeljeni tekst: ")
  97. print("Tekst je uspesno unet.")
  98. s.send(text.encode('ascii'))
  99. response = s.recv(1024).decode('ascii')
  100. while response[0:2] != "OK":
  101. print("Doslo je do greske u uplodu!")
  102. s.send(text.encode('ascii'))
  103. response = s.recv(1024).decode('ascii')
  104. print("Uspesno uploadovan fajl")
  105.  
  106. code = s.recv(1024).decode('ascii')
  107. s.send(id.encode('ascii'))
  108. print("Vas kod potreban za download je: ",code)
  109. print("---------HINT----------")
  110. print("(Najbolje bi bilo zapisati ga na papir ;-))")
  111.  
  112. """
  113. Forma za logovanje
  114. """
  115.  
  116. def log_in(s):
  117. global id
  118. username = input("Unesite Vase korisnicko ime: ")
  119. s.send(username.encode('ascii'))
  120. response = s.recv(1024)
  121. while response.decode('ascii')[0:3] == "ERR":
  122. if username == 'q':
  123. s.send('q'.encode('ascii'))
  124. return
  125. username = input("Unesite postojece korisnicko ime: ")
  126. s.send(username.encode('ascii'))
  127. response = s.recv(1024)
  128.  
  129. password = input("Unesite Vasu lozinku: ")
  130. s.send(password.encode('ascii'))
  131. response = s.recv(1024)
  132. while response.decode('ascii')[0:3] == "ERR":
  133. password = input("Uneli ste pogresnu lozinku\nPokusajte ponovo: ")
  134. s.send(password.encode('ascii'))
  135. response = s.recv(1024)
  136. print("Uspesno izvrseno logovanje!")
  137. id = username
  138.  
  139. """
  140. Funkcija koja vrši navigaciju kroz aplikaciju
  141. """
  142.  
  143. def mainMenu(s):
  144. global id
  145. while True:
  146. id = ""
  147. print("1. Log in")
  148. print("2. Sign up")
  149. print("3. Guest..")
  150. print("UNESITE 'q' ZA IZLAZ")
  151. option = input("Unesite zeljenu opciju: ")
  152. s.send(option.encode('ascii'))
  153. if option == '1':
  154. log_in(s)
  155. suppMenu(s)
  156. elif option == '2':
  157. add_new_user(s)
  158. suppMenu(s)
  159. elif option == '3':
  160. print("Ulogovani ste kao gost\nOmogucen vam je samo download!")
  161. download(s)
  162. elif option == 'q':
  163. print("Vratite se ponovo.")
  164. return
  165. else:
  166. print("Unesite validnu komandu: ")
  167. """
  168. Meni koji se prikazuje ulogovanim korisnicima
  169. zatim se od njge trazi da unese zeljenu opciju
  170. za nastavak rada
  171. """
  172.  
  173. def suppMenu(s):
  174. global id
  175. while True:
  176. print("1. Download")
  177. print("2. Upload")
  178. print("3. Izlistaj moje fajlove")
  179. print("UNESITE 'q' ZA LOG OUT")
  180. userInput = input("Unesite zeljenu opciju: ")
  181. s.send(userInput.encode('ascii'))
  182. if userInput == '1':
  183. download(s)
  184. elif userInput == '2':
  185. upload(s)
  186. elif userInput == '3':
  187. s.send(id.encode('ascii'))
  188. print('Lista Vasih fajlova: ' + s.recv(1024).decode('ascii'))
  189. elif userInput == 'q':
  190. id = ''
  191. return
  192.  
  193. """
  194. Main metoda klijenta
  195. """
  196.  
  197. def main():
  198. host = socket.gethostname()
  199. port = 10000
  200.  
  201. s = socket.socket()
  202. try:
  203. s.connect((host,port))
  204. mainMenu(s)
  205. except ConnectionRefusedError:
  206. print("Veza sa serverom nije uspostavljena!")
  207. s.close()
  208. except:
  209. print("Doslo je do prekida konekcije!")
  210. s.close()
  211.  
  212. if __name__ == '__main__':
  213. main()
Add Comment
Please, Sign In to add comment