#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <unistd.h>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char *argv[])
{
if (argc != 3)
{
cout << "Usage: <challenge name> <port>";
}
else
{
char udp_buffer[4096];
memset(udp_buffer, 0, 4096);
struct hostent *hp = gethostbyname(argv[1]);
string ip = inet_ntoa(*(struct in_addr*)(hp->h_addr_list[0]));
struct sockaddr_in udpserver;
struct sockaddr_in udpclient;
int udpfd = socket(AF_INET, SOCK_DGRAM, 0);
udpserver.sin_family = AF_INET;
udpserver.sin_port = htons(atoi(argv[2]));
inet_pton(AF_INET, ip.c_str(), &udpserver.sin_addr);
//bind(udpfd, (struct sockaddr*)&udpserver, sizeof(udpserver));
socklen_t len = sizeof(udpserver);
string activate = { "hi\n" };
sendto(udpfd, activate.c_str(), activate.size(), 0, (struct sockaddr*)&udpserver, len);
for (int t = 0; t < 5; t++)
{
memset(udp_buffer, 0, 4096);
int n = recvfrom(udpfd, udp_buffer, 4096, 0, (struct sockaddr*)&udpserver, &len);
printf("%s", udp_buffer);
udp_buffer[n] = '\n';
sendto(udpfd, udp_buffer, sizeof(udp_buffer), 0, (struct sockaddr*)&udpserver, len);
printf("%s", udp_buffer);
}
}
}