Repository navigation
Expand file tree
/
Copy pathRFTClient.py
More file actions
56 lines (46 loc) · 2.38 KB
/
Copy pathRFTClient.py
File metadata and controls
56 lines (46 loc) · 2.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
"""
Author: Caleb Naeger - cmn4315@rit.edu
Client for ReFileAble Transfer.
"""
import argparse
import RDTUnit
def main(mode: str, server_ip: str, server_port: int, filename: str, my_port: int, timeout: int = 1):
"""Main for RFT Client. Will send a request to the server, then begin sending or receiving a file.
:param mode: mode to run the client in, either 'send' to send a file to the server or 'recv' to request one
:param server_ip: dotted decimal string of the server's IP
:param server_port: integer port for the server
:param filename: name of the file to send or request
:param my_port: port to use for client's RDTSender/RDTRecvr(s)
:param timeout: timeout value to pass to RDTSender
"""
msg = ""
if mode == "send":
msg = bytes("RFTSend." + filename, "utf-8")
elif mode == "recv":
msg = bytes("RFTRecv." + filename, 'utf-8')
else:
return
if msg != "":
req_sender = RDTUnit.RDTSender(data = msg, dstip=server_ip, dstport=server_port, srcport=my_port, timeout=timeout)
req_sender.start()
if mode == "send":
with open(filename, 'rb') as f:
data = f.read()
client = RDTUnit.RDTSender(data=data, dstip=server_ip, dstport=server_port, srcport=my_port, timeout=timeout)
client.start()
else:
client = RDTUnit.RDTRecvr(srcport=my_port)
filedata, _ = client.start()
with open(filename, "wb") as f:
f.write(filedata)
if __name__ == "__main__":
# Create the parser
parser = argparse.ArgumentParser(description='A simple ping utility')
# Add arguments
parser.add_argument("-f", type=str, required=True, help="The filename to either send to or request from the server.")
parser.add_argument('-server_ip', required=False, type=str, default='127.0.0.1', help='The destination IP address for the RDTReceiver')
parser.add_argument('-server_port', required=False, type=int, default=8082, help='The destination port for the RDTReceiver')
parser.add_argument('-port', required=False,type=int, default=8080, help='The destination port for the RDTSender')
parser.add_argument("--mode", choices=["recv", "send"], type=str, required=True, help="The mode in which to run, either sending or receiving a file from the server.")
args = parser.parse_args()
main(args.mode, args.server_ip, args.server_port, args.f, args.port)