Dodaj 'klient.py'
This commit is contained in:
parent
6de9546d73
commit
ca6575e2d0
113
klient.py
Normal file
113
klient.py
Normal file
@ -0,0 +1,113 @@
|
||||
#coding=utf-8
|
||||
import socket
|
||||
from pprint import pprint
|
||||
from time import sleep
|
||||
SOCKET_DATA_LENGTH = 1024
|
||||
|
||||
def kill_server_process(port_number):
|
||||
"""ubija proces na porcie - przydatne podczas testowania"""
|
||||
#lsof -i:12345
|
||||
#kill -9 $(lsof -t -i:12345)
|
||||
# sudo kill $(sudo lsof -t -i:8000)
|
||||
pass
|
||||
|
||||
|
||||
class Client:
|
||||
def __init__(self, target_host="127.0.0.1", target_port=12346, recv_len=SOCKET_DATA_LENGTH):
|
||||
"""Tworzy obiket socketa dla klienta"""
|
||||
self.recv_len = recv_len
|
||||
self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # utworzenie obiektu gniazda
|
||||
self.client_socket.connect((target_host, target_port)) # polaczenie z klientem
|
||||
|
||||
def get_message_from_server(self):
|
||||
"""Pobiera wiadomosc od serwera i ja wysiwetla, tak długo jak są jakieś dane"""
|
||||
|
||||
response = self.client_socket.recv(SOCKET_DATA_LENGTH)
|
||||
print(response)
|
||||
|
||||
|
||||
def send_message_to_server(self, msg):
|
||||
self.client_socket.send(msg)
|
||||
self.get_message_from_server()
|
||||
|
||||
def request_for_file_list(self):
|
||||
"""Prosi serwer o liste dostepnych plikow"""
|
||||
self.send_message_to_server("[1]")
|
||||
|
||||
|
||||
def get_file_from_server(self, filename):
|
||||
"""Pobiera i zapisuje plik wybrany przez użytkownika od serwera"""
|
||||
self.send_message_to_server("[2]<{filename}>".format(filename=filename))
|
||||
self.get_message_from_server()
|
||||
|
||||
|
||||
def end_connection(self):
|
||||
print("Zamykanie obiektu klienta")
|
||||
self.send_message_to_server("[3]")
|
||||
sleep(0.1)
|
||||
|
||||
try:
|
||||
self.client_socket.close()
|
||||
except BaseException:
|
||||
pass
|
||||
|
||||
|
||||
def menu():
|
||||
"""Wyświetla klientowi menu z dostpenymi opcjami jakie moze żadać od serwera"""
|
||||
|
||||
print( """
|
||||
[1] Wyświetl listę plików z serwera\n
|
||||
[2] Pobierz plik; wymagana <nazwa_pliku>\n
|
||||
[3] Zakończ komunikację\n
|
||||
""")
|
||||
|
||||
|
||||
def setup():
|
||||
""" Pobiera od usera z inputu dane do stworzenia socketu klienta - tworzy obiekt klienta"""
|
||||
server_address = str(input("Podaj adres serwera: "))
|
||||
server_port = int(input("Podaj port serwera: "))
|
||||
|
||||
try:
|
||||
client = Client(target_host=server_address, target_port=int(server_port))
|
||||
client.get_message_from_server() # serwer wita
|
||||
return client
|
||||
except BaseException as exception:
|
||||
print("Nie można utworzyć połączenia z serwerem: {0}:{1}.\n\tBłąd{2}".format(
|
||||
server_address, server_port, exception
|
||||
))
|
||||
exit(-1)
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
Głoówny program i pętla klienta, zakańcza się gdy ten wybierze opcje `3`
|
||||
"""
|
||||
client = setup() #tworzenie obiektu klietna oraz połączenia
|
||||
option = None
|
||||
|
||||
while option != 3: #pętla dopóki klient nie wybierze opcji 3
|
||||
if option not in ['1','2','3']:
|
||||
menu()
|
||||
|
||||
if option == '1':
|
||||
print(1)
|
||||
client.request_for_file_list()
|
||||
option = None # żeby dalej zostać w pętli
|
||||
|
||||
if option == '2':
|
||||
print(2)
|
||||
filename = str(input("Podaj nazwe pliku: "))
|
||||
client.get_file_from_server(filename)
|
||||
option = None # żeby dalej zostać w pętli
|
||||
|
||||
if option == '3':
|
||||
print(3)
|
||||
client.end_connection() # usuwa socket i cały obiekt klienta
|
||||
exit(1)
|
||||
|
||||
print("option: ", option)
|
||||
option = str(input("Wybierz opcje: ")) # żeby dalej w pętli pobierac opcje od klienta
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Loading…
Reference in New Issue
Block a user