Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import struct
- import time
- from socket import *
- import sys
- from subprocess import call
- def clear():
- _ = call('clear' if os.name =='posix' else 'cls')
- def mainMenu():
- clear()
- print("===================\n"
- " MAIN MENU\n"
- "\n Disconnected\n"
- "===================")
- print("1. Set PC as client\n"
- "2. Set PC as server\n"
- "3.Change IP address\n"
- "4.Change PORT\n")
- print("5. Exit")
- selection = int(input("Select: "))
- if selection==1:
- start_client()
- elif selection==2:
- start_server()
- elif selection==3:
- exit()
- else:
- print("Vyber cislo z menu!")
- mainMenu()
- def start_client():
- content = None
- host = "127.0.0.1"
- port = 10050
- size_of_fragment = 1024
- UDPSock = socket(AF_INET, SOCK_DGRAM)
- def client_menu1(host, port):
- addr = (host, port)
- if connect(addr):
- clear()
- print("====Connected!====")
- print("==================\n"
- "CLIENT MENU\n"
- f"IP: {host}\n"
- f"PORT: {port}\n"
- f"Fragment size: {size_of_fragment}\n"
- "==================\n")
- print("1.Change size of fragment")
- selection = int(input("Select: "))
- if selection == 1:
- host = client_set_ip()
- client_menu1(host, port)
- elif selection == 2:
- client_set_port()
- elif selection == 3:
- exit()
- else:
- print("Vyber cislo z menu!")
- client_menu1(host, port)
- else:
- mainMenu()
- def client_set_ip():
- host = input("Zadaj IP adresu kam chces posielat v tvare xxx.xxx.xxx.xxx\n")
- return host
- def client_size_of_fragment():
- size_of_fragment = input("Zadaj velkost fragmentu - max 1024, min - 13") #este treba upravit
- return size_of_fragment
- # file_name = print("Zadaj nazov suboru aj s cestou\n")
- # with open('file_name', 'rb') as f:
- # content = f.read()
- def header_connection_msg():
- type = 0 #0 connection, 1 - info, 2 - data_head
- size_fragments = 1500#user_edit
- num_fragments = 1 #sizeofMSG/sizeoffragments
- type_of_msg = 0 #0 - text, 1 - file
- #checksum = CRC
- header = struct.pack("cHHc", b'0', size_fragments, num_fragments, b'0')
- return header
- def connect(addr):
- datap = header_connection_msg()
- success = 1
- time = 0
- while True:
- time = time + 1
- print(f"{time}Pripajam")
- UDPSock.sendto(datap, addr)
- UDPSock.settimeout(0.5)
- try:
- success, addr = UDPSock.recvfrom(1024)
- except error:
- success = None
- if success is not None:
- return True
- if time > 30:
- break
- client_menu1(host, port)
- while True:
- data = input("Zadaj spravu")
- UDPSock.sendto(data.encode(), addr)
- (datap, addr) = UDPSock.recvfrom(1024)
- print(datap.decode())
- if data == "exit":
- break
- UDPSock.close()
- os._exit(0)
- def start_server():
- host = "127.0.0.1"
- port = 10050
- buf = 1024
- address = (host, port)
- p = 0
- UDPSock = socket(AF_INET, SOCK_DGRAM)
- UDPSock.bind(address)
- while True:
- (header, address) = UDPSock.recvfrom(500)
- type, size_fragments, num_fragments, type_of_msg = struct.unpack("cHHc", header)
- if type == b'0':
- break
- if type == b'0':
- p = b'0'
- print(f"lol")
- UDPSock.sendto(p, address)
- print('Server caka')
- while True:
- (data, address) = UDPSock.recvfrom(5)
- data1 = "Server prijal spravu"
- UDPSock.sendto(data1.encode(), address)
- print(f"Received message: {sys.getsizeof(data)}")
- print(f"Received message: {data}")
- if data == b"exit":
- break
- UDPSock.close()
- os._exit(0)
- mainMenu()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement