Program 9:- Applications using TCP and UDP sockets like d.DNS e. SNMP f.
File transfer
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <fcntl.h>
#define BUFFER_SIZE 1024
// =================== DNS (UDP) =====================
void dns_server() {
int sockfd;
char buffer[BUFFER_SIZE];
struct sockaddr_in servaddr, cliaddr;
socklen_t len = sizeof(cliaddr);
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(5353);
servaddr.sin_addr.s_addr = INADDR_ANY;
bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
printf("DNS Server ready...\n");
recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&cliaddr, &len);
printf("Client asked for domain: %s\n", buffer);
char *response = "142.250.182.206"; // IP for google.com
sendto(sockfd, response, strlen(response), 0, (struct sockaddr*)&cliaddr, len);
close(sockfd);
void dns_client() {
int sockfd;
char buffer[BUFFER_SIZE] = "google.com";
struct sockaddr_in servaddr;
socklen_t len = sizeof(servaddr);
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(5353);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr*)&servaddr, len);
recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&servaddr, &len);
printf("DNS Response: %s\n", buffer);
close(sockfd);
}
// =================== SNMP (UDP) =====================
void snmp_server() {
int sockfd;
char buffer[BUFFER_SIZE];
struct sockaddr_in servaddr, cliaddr;
socklen_t len = sizeof(cliaddr);
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(161);
servaddr.sin_addr.s_addr = INADDR_ANY;
bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
printf("SNMP Server ready...\n");
recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&cliaddr, &len);
printf("SNMP Request: %s\n", buffer);
char *response = "Uptime: 10234 seconds";
sendto(sockfd, response, strlen(response), 0, (struct sockaddr*)&cliaddr, len);
close(sockfd);
void snmp_client() {
int sockfd;
char buffer[BUFFER_SIZE] = "GET uptime";
struct sockaddr_in servaddr;
socklen_t len = sizeof(servaddr);
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(161);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr*)&servaddr, len);
recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&servaddr, &len);
printf("SNMP Response: %s\n", buffer);
close(sockfd);
// =================== File Transfer (TCP) =====================
void file_server() {
int sockfd, new_sock;
struct sockaddr_in servaddr, cliaddr;
socklen_t len = sizeof(cliaddr);
char buffer[BUFFER_SIZE];
sockfd = socket(AF_INET, SOCK_STREAM, 0);
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(2121);
servaddr.sin_addr.s_addr = INADDR_ANY;
bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
listen(sockfd, 1);
printf("File Server waiting for connection...\n");
new_sock = accept(sockfd, (struct sockaddr*)&cliaddr, &len);
printf("Client connected.\n");
int file = open("file.txt", O_RDONLY);
int n;
while ((n = read(file, buffer, sizeof(buffer))) > 0) {
send(new_sock, buffer, n, 0);
close(file);
close(new_sock);
close(sockfd);
printf("File sent.\n");
void file_client() {
int sockfd;
struct sockaddr_in servaddr;
char buffer[BUFFER_SIZE];
sockfd = socket(AF_INET, SOCK_STREAM, 0);
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(2121);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
printf("Connected to file server.\n");
int file = open("received.txt", O_WRONLY | O_CREAT, 0666);
int n;
while ((n = recv(sockfd, buffer, sizeof(buffer), 0)) > 0) {
write(file, buffer, n);
close(file);
close(sockfd);
printf("File received and saved as 'received.txt'\n");
// =================== MAIN MENU =====================
int main() {
int choice, mode;
printf("Select Application:\n");
printf("1. DNS (UDP)\n");
printf("2. SNMP (UDP)\n");
printf("3. File Transfer (TCP)\n");
printf("Enter choice: ");
scanf("%d", &choice);
printf("Select Mode:\n1. Server\n2. Client\nEnter: ");
scanf("%d", &mode);
if (choice == 1 && mode == 1) dns_server();
else if (choice == 1 && mode == 2) dns_client();
else if (choice == 2 && mode == 1) snmp_server();
else if (choice == 2 && mode == 2) snmp_client();
else if (choice == 3 && mode == 1) file_server();
else if (choice == 3 && mode == 2) file_client();
else printf("Invalid choice.\n");
return 0;