// Experiment 6: UDP Client-Server program
// CLIENT side
// Compile: gcc 06_udp_client.c -o udpclient
// Run    : ./udpclient   (run AFTER udpserver)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define PORT 9090
#define BUF  1024

int main() {
    int sockfd;
    char buffer[BUF];
    char *msg = "Hello from UDP client!";
    struct sockaddr_in servaddr;

    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("socket"); exit(EXIT_FAILURE);
    }

    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port   = htons(PORT);
    inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);

    sendto(sockfd, msg, strlen(msg), 0,
           (const struct sockaddr*)&servaddr, sizeof(servaddr));
    printf("Message sent to server.\n");

    socklen_t len = sizeof(servaddr);
    int n = recvfrom(sockfd, buffer, BUF, 0,
                     (struct sockaddr*)&servaddr, &len);
    buffer[n] = '\0';
    printf("Server replied: %s\n", buffer);

    close(sockfd);
    return 0;
}
