6
6
7
7
8
8
int main (int argc, char * argv[]) {
9
- // Parse input options from CLI
9
+ // Parsing input parameters from the CLI
10
10
cxxopts::Options options (" File-Broadcaster" , " UDB Broadcast file transfer" );
11
11
12
12
options
13
13
.positional_help (" [optional args]" )
14
14
.show_positional_help ();
15
15
16
16
options.add_options ()
17
- (" p,port" , " Port" , cxxopts::value<int >()->default_value (" 33333" ))
18
- (" f,file" , " File name" , cxxopts::value<std::string>())
17
+ (" f,file" , " File name" , cxxopts::value<std::string>()->default_value (" file.out" ))
19
18
(" t,type" , " Receiver or sender" , cxxopts::value<std::string>()->default_value (" sender" ))
20
- (" ttl" , " Time to live" , cxxopts::value<int >()->default_value (" 15" ))
19
+ (" broadcast" , " Broadcast address" , cxxopts::value<std::string>()->default_value (" yes" ))
20
+ (" p,port" , " Port" , cxxopts::value<int >()->default_value (" 33333" ))
21
21
(" mtu" , " MTU packet" , cxxopts::value<int >()->default_value (" 1500" ))
22
- (" broadcast " , " Broadcast address " , cxxopts::value<std::string >()->default_value (" yes " ));
22
+ (" ttl " , " Time to live " , cxxopts::value<int >()->default_value (" 15 " ));
23
23
24
24
auto result = options.parse (argc, argv);
25
25
26
26
#if defined(_WIN32) || defined(_WIN64) //
27
- WORD socketVer; // Initialize use
27
+ WORD socketVer; // Initializing the use
28
28
WSADATA wsaData; // of the Winsock DLL
29
- socketVer = MAKEWORD (2 , 2 ); // by a process.
29
+ socketVer = MAKEWORD (2 , 2 ); // by this process.
30
30
WSAStartup (socketVer, &wsaData); //
31
31
#endif //
32
32
33
- mtu = result[" mtu" ].as <int >(); //
34
- ttl = ttl_max = result[" ttl" ].as <int >(); // Init some var
35
- fileName = result[" file" ].as <std::string>(); //
33
+ mtu = result[" mtu" ].as <int >(); //
34
+ ttl = result[" ttl" ].as <int >(); // Initializing some variable
35
+ ttl_max = result[" ttl" ].as <int >(); //
36
+ fileName = result[" file" ].as <std::string>(); //
36
37
37
38
38
- _socket = socket (AF_INET, SOCK_DGRAM, IPPROTO_IP); //
39
- if (_socket < 0 ) { // Create socket with
40
- std::cout << " Can't create socket" << std::endl; // datagram-based protocol
41
- exit (1 ); //
42
- } //
39
+ _socket = socket (AF_INET, SOCK_DGRAM, IPPROTO_IP); //
40
+ if (_socket < 0 ) { // Create socket with
41
+ std::cout << " Error: Can't create socket" << std::endl; // datagram-based protocol
42
+ exit (1 ); //
43
+ } else { //
44
+ std::cout << " Ok: Socket created" << std::endl; //
45
+ } //
43
46
44
47
client_address.sin_family = AF_INET; //
45
- client_address.sin_port = htons (result[" port" ].as <int >()); // Create local address
48
+ client_address.sin_port = htons (result[" port" ].as <int >()); // Creating local address
46
49
client_address.sin_addr .s_addr = INADDR_ANY; //
47
50
48
51
memcpy (&server_address, &client_address, sizeof (server_address)); // Server address == Client address
49
52
50
- broadcast_address.sin_family = AF_INET; // Create broadcast
53
+ broadcast_address.sin_family = AF_INET; // Creating broadcast
51
54
broadcast_address.sin_port = htons (result[" port" ].as <int >()); // address
52
55
53
- if (result[" broadcast" ].as <std::string>() == " yes" ) { //
54
- #if defined(_WIN32) || defined(_WIN64) // Give access to
55
- char broadcastEnable = ' 1' ; // broadcast address
56
- #else //
57
- int broadcastEnable = 1 ; //
58
- #endif //
59
- //
60
- if (setsockopt (_socket, SOL_SOCKET, SO_BROADCAST, //
61
- &broadcastEnable, sizeof (broadcastEnable)) == 0 ) { //
62
- std::cout << " Got access to broadcast" << std::endl; //
63
- } else { //
64
- std::cerr << " Cant't get access to broadcast" << std::endl; //
65
- exit (1 ); //
66
- } // If option ' broadcast' is yes
67
- broadcast_address.sin_addr .s_addr = INADDR_BROADCAST; // change server address
68
- } else { // to broadcast
69
- broadcast_address.sin_addr .s_addr = // Else change server address
70
- inet_addr (result[" broadcast" ].as <std::string>().c_str ()); // to address in option
71
- } //
56
+ if (result[" broadcast" ].as <std::string>() == " yes" ) { //
57
+ #if defined(_WIN32) || defined(_WIN64) // Getting access to
58
+ char broadcastEnable = ' 1' ; // the broadcast address
59
+ #else //
60
+ int broadcastEnable = 1 ; //
61
+ #endif //
62
+ //
63
+ if (setsockopt (_socket, SOL_SOCKET, SO_BROADCAST, //
64
+ &broadcastEnable, sizeof (broadcastEnable)) != 0 ) { //
65
+ std::cout << " Ok: Got access to broadcast" << std::endl; //
66
+ } else { //
67
+ std::cerr << " Error: Cant't get access to broadcast" << std::endl; //
68
+ exit (1 ); //
69
+ } // If parameter " broadcast" is " yes", then
70
+ broadcast_address.sin_addr .s_addr = INADDR_BROADCAST; // change server address
71
+ } else { // to broadcast
72
+ broadcast_address.sin_addr .s_addr = // Else change server address
73
+ inet_addr (result[" broadcast" ].as <std::string>().c_str ()); // to address in parameter
74
+ } //
72
75
73
76
if (bind (_socket, (sockaddr *)&client_address, sizeof (client_address)) == 0 ) {//
74
- std::cout << " Bind socket " << std::endl; //
77
+ std::cout << " Ok: Socket binded " << std::endl; //
75
78
} else { // Bind socket to
76
- std::cerr << " Can't bind socket" << std::endl; // client address
79
+ std::cerr << " Error: Can't bind socket" << std::endl; // client address
77
80
exit (1 ); //
78
81
} //
79
82
@@ -93,7 +96,7 @@ int main(int argc, char* argv[]) {
93
96
} else if (result[" type" ].as <std::string>() == " sender" ) { // Run receiver or sender
94
97
Sender::run (result); // application
95
98
} else { //
96
- std::cerr << " Type not found" << std::endl; //
99
+ std::cerr << " Error: Type not found" << std::endl; //
97
100
}
98
101
99
102
return 0 ;
0 commit comments