Write two c++ programs to implement a distributed version of a multithreaded Huffman decompressor using the one in project 1 The server program The user will execute this program using the following syntax: ./exec_filename port_no < input_filename where exec_filename is the name of your executable file, port_no is the port number to create the socket, and input_filename is the name of the file with the alphabet's information. The port number will be available to the server program as a command-line argument. The server program receives from STDIN the alphabet's information (using input redirection). The input file has multiple lines, where each line contains information (character and frequency) about a symbol from the alphabet. The input file format is as follows: A char representing the symbol. An integer representing the frequency of the symbol. Example Input File: E 3 G 3 F 1 H 2 Given the previous input file, the expected output for the server program is: Symbol: G, Frequency: 3, Code: 0 Symbol: F, Frequency: 1, Code: 100 Symbol: H, Frequency: 2, Code: 101 Symbol: E, Frequency: 3, Code: 11 The client program: The user will execute this program using the following syntax: ./exec_filename hostname port_no < compressed_filename where exec_filename is the name of your executable file, hostname is the address where the server program is located, port_no is the port number used by the server program, and compressed_filename is the name of the compressed file. The hostname and the port number will be available to the client as command-line arguments. The client program receives from STDIN (using input redirection) m lines (where m is the number of symbols in the alphabet). Each line of the compressed file has the following format: A string representing the binary code of the symbol. A list of n integers (where n is the frequency of the symbol) representing the positions where the symbol appears in the message. Example Compressed File: 11 1 3 5 0 0 2 4 101 6 8 100 7 Given the previous compressed, the expected output is: Original message: GEGEGEHFH Notes: You can safely assume that the input files will always be in the proper format. You must use the output statement format based on the example above. For the client program, you must use POSIX Threads and stream sockets. You must use multiple processes (fork) and stream sockets for the server program. project 1 code: https://replit.com/@jacksmith-2023/PA1 input and output usage: ./server 8080 < input1.txt Input for the Server: E 3 G 3 F 1 H 2 usage: ./client local host 8080 < compressed1.txt Input for the Client: 11 1 3 5 0 0 2 4 101 6 8 100 7 Expected Output Symbol: G, Frequency: 3, Code: 0 Symbol: F, Frequency: 1, Code: 100 Symbol: H, Frequency: 2, Code: 101 Symbol: E, Frequency: 3, Code: 11 Original message: GEGEGEHFH
Include the code to any h files used
Write two c++ programs to implement a distributed version of a multithreaded Huffman decompressor using the one in project 1
The server
The user will execute this program using the following syntax:
./exec_filename port_no < input_filename
where exec_filename is the name of your executable file, port_no is the port number to create the socket, and input_filename is the name of the file with the alphabet's information. The port number will be available to the server program as a command-line argument.
The server program receives from STDIN the alphabet's information (using input redirection). The input file has multiple lines, where each line contains information (character and frequency) about a symbol from the alphabet. The input file format is as follows:
A char representing the symbol.
An integer representing the frequency of the symbol.
Example Input File:
E 3
G 3
F 1
H 2
Given the previous input file, the expected output for the server program is:
Symbol: G, Frequency: 3, Code: 0
Symbol: F, Frequency: 1, Code: 100
Symbol: H, Frequency: 2, Code: 101
Symbol: E, Frequency: 3, Code: 11
The client program:
The user will execute this program using the following syntax:
./exec_filename hostname port_no < compressed_filename
where exec_filename is the name of your executable file, hostname is the address where the server program is located, port_no is the port number used by the server program, and compressed_filename is the name of the compressed file. The hostname and the port number will be available to the client as command-line arguments.
The client program receives from STDIN (using input redirection) m lines (where m is the number of symbols in the alphabet). Each line of the compressed file has the following format:
A string representing the binary code of the symbol.
A list of n integers (where n is the frequency of the symbol) representing the positions where the symbol appears in the message.
Example Compressed File:
11 1 3 5
0 0 2 4
101 6 8
100 7
Given the previous compressed, the expected output is:
Original message: GEGEGEHFH
Notes:
You can safely assume that the input files will always be in the proper format.
You must use the output statement format based on the example above.
For the client program, you must use POSIX Threads and stream sockets.
You must use multiple processes (fork) and stream sockets for the server program.
project 1 code:
https://replit.com/@jacksmith-2023/PA1
input and output
usage: ./server 8080 < input1.txt
Input for the Server:
E 3
G 3
F 1
H 2
usage: ./client local host 8080 < compressed1.txt
Input for the Client:
11 1 3 5
0 0 2 4
101 6 8
100 7
Expected Output
Symbol: G, Frequency: 3, Code: 0
Symbol: F, Frequency: 1, Code: 100
Symbol: H, Frequency: 2, Code: 101
Symbol: E, Frequency: 3, Code: 11
Original message: GEGEGEHFH
Trending now
This is a popular solution!
Step by step
Solved in 4 steps with 5 images