Design and implement a Java program that transfers fragments of a file to multiple remote nodes. The class should take as input:
1. A file path to file of a fixed size (64MB).
2. An unordered list of 64 IP addresses/port numbers.
3. The maximum transfer rate for the sender (in Kbps). The rate limits the total amount of bandwidth a sender consumes when transferring file fragments.
The program should divide the file up into 64x1MB fragments and send one fragment to each of the 64 nodes. A TCP socket should be used for communication with each of the nodes. The transfer should honor the rate set by the user. Assume that each of the remote nodes have equal upstream and downstream bandwidth. The focus should be to:
· Minimize the total time it takes to send the entire 64MB file.
· Minimize the communication overhead.
· Minimize system resources consumed during the transfer.
Please submit working code with build instructions (Eclipse project environment preferred), all test code (JUnit or other code used to debug the solution), a one page (or less) description of how you tested your solution and why you tested the way you did, and a one page (or less) description of why you chose the solution and an evaluation of how it performs against the goals stated above.
Exceptional solutions will:
Handle both IPv4 and IPv6 format addresses
Handle endpoints that receive data at different rates
Gracefully recover from errors (make good use of exception handling)
Be thoroughly commented