Write client and server programs(using c) for interaction between server and client processes using Unix Domain sockets.
AIM:
Write client and server programs(using c) for interaction between server and client processes using Unix Domain sockets.
Program:
client1.c:
#include <stdio.h> #include <sys/socket.h> #include <sys/un.h> #include <unistd.h> #include <string.h> int main(void) { struct sockaddr_un address; int socket_fd, nbytes; char buffer[256]; socket_fd = socket(PF_UNIX, SOCK_STREAM, 0); if(socket_fd < 0) { printf("socket() failed\n"); return 1; } /* start with a clean address structure */ memset(&address, 0, sizeof(struct sockaddr_un)); address.sun_family = AF_UNIX; snprintf(address.sun_path, UNIX_PATH_MAX, "./demo_socket"); if(connect(socket_fd, (struct sockaddr *) &address, sizeof(struct sockaddr_un)) != 0) { printf("connect() failed\n"); return 1; } nbytes = snprintf(buffer, 256, "hello from a client"); write(socket_fd, buffer, nbytes); nbytes = read(socket_fd, buffer, 256); buffer[nbytes] = 0; printf("MESSAGE FROM SERVER: %s\n", buffer); close(socket_fd); return 0; }
server1.c:
#include <stdio.h> #include <sys/socket.h> #include <sys/un.h> #include <sys/types.h> #include <unistd.h> #include <string.h> int connection_handler(int connection_fd) { int nbytes; char buffer[256]; nbytes = read(connection_fd, buffer, 256); buffer[nbytes] = 0; printf("MESSAGE FROM CLIENT: %s\n", buffer); nbytes = snprintf(buffer, 256, "hello from the server"); write(connection_fd, buffer, nbytes); close(connection_fd); return 0; } int main(void) { struct sockaddr_un address; int socket_fd, connection_fd; socklen_t address_length; pid_t child; socket_fd = socket(PF_UNIX, SOCK_STREAM, 0); if(socket_fd < 0) { printf("socket() failed\n"); return 1; } unlink("./demo_socket"); /* start with a clean address structure */ memset(&address, 0, sizeof(struct sockaddr_un)); address.sun_family = AF_UNIX; snprintf(address.sun_path, UNIX_PATH_MAX, "./demo_socket"); if(bind(socket_fd, (struct sockaddr *) &address, sizeof(struct sockaddr_un)) != 0) { printf("bind() failed\n"); return 1; } if(listen(socket_fd, 5) != 0) { printf("listen() failed\n"); return 1; } while((connection_fd = accept(socket_fd, (struct sockaddr *) &address, &address_length)) > -1) { child = fork(); if(child == 0) { /* now inside newly created connection handling process */ return connection_handler(connection_fd); } /* still inside server process */ close(connection_fd); } close(socket_fd); unlink("./demo_socket"); return 0; }
Output:
Student@ubuntu:~$gcc –o server1.out server1.c Student@ubuntu:~$gcc client1.out client1.c Student@ubuntu:~$ ./client1.out MESSAGE FROM SERVER hello from the server Student@ubuntu:~$ ./server1.out MESSAGE FROM CLIENT hello from the CLIENT
-
UpdatedOct 23, 2014
-
Views7,851
Write a Shell script to find factorial of a given integer.
Write in C the following Unix commands using system calls A). cat B). ls C). mv
Write a Shell script that displays list of all the files in the current directory to which the user has read, Write and execute permissions.
Write a Shell script that accepts a filename, starting and ending line numbers as arguments and displays all the lines between the given line numbers.
Write a C program to emulate the Unix ls-l command.
Write a Shell script to list all of the directory files in a directory.