-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUDPClient.c
More file actions
50 lines (41 loc) · 1.6 KB
/
UDPClient.c
File metadata and controls
50 lines (41 loc) · 1.6 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
#include "UDPProxy.h"
int main(int argc, char **argv) {
struct sockaddr_in serv_addr, recv;
int sock, port, clnt_port, num_pkts, i, len = sizeof(serv_addr);
char buff[BUFF_LEN];
char addr_buff[INET_ADDRSTRLEN];
if(argc < 5) {
die("Usage: UDPClient <server_ip> <server_port> <client_port> <num_packets>");
}
port = atoi(argv[2]);
clnt_port = atoi(argv[3]);
num_pkts = atoi(argv[4]);
/* prepare address for destination */
memset((char *) &serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(port);
if (inet_aton(argv[1], &serv_addr.sin_addr) == 0) {
die("Invalid IP entered");
}
sock = bind_sock(INADDR_ANY, clnt_port);
/* initialize buffer */
memset((char *) &buff, 0, sizeof(buff));
for(i = 0; i < num_pkts; i++) {
sprintf(buff, "Packet %d\n", i);
if (sendto(sock, buff, PKT_SZ, 0, (struct sockaddr *)&serv_addr, len) < 0) {
die("Send Error");
}
/* print addr info for testing */
inet_ntop(AF_INET, &serv_addr.sin_addr.s_addr, addr_buff, \
INET_ADDRSTRLEN); //get dest info
printf("Packet %d sent to %s:%d\n", i, addr_buff, \
ntohs(serv_addr.sin_port));
if (recvfrom(sock, buff, BUFF_LEN, 0, (struct sockaddr *) &recv,\
(socklen_t *)&len) < 0) {
die("Receive error");
}
inet_ntop(AF_INET, &recv.sin_addr.s_addr, addr_buff, INET_ADDRSTRLEN);
printf("Received Packet from %s:%d\n", addr_buff, ntohs(recv.sin_port));
}
return 0;
}