EXPERIMENT 4
AIM :To write a program to implement UDP
UDP Server :
1. Create a UDP socket.
2. Bind the socket to the server address.
3. Wait until the datagram packet arrives from the client.
4. Process the datagram packet and send a reply to the client.
5. Go back to Step 3.
UDP Client :
1. Create a UDP socket.
2. Send a message to the server.
3. Wait until response from the server is received.
4. Process reply and go back to step 2, if necessary.
5. Close socket descriptor and exit.
Necessary Functions :
int socket(int domain, int type, int protocol)
Creates an unbound socket in the specified domain.
Returns socket file descriptor.
Arguments :
domain – Specifies the communication
domain ( AF_INET for IPv4/ AF_INET6 for IPv6 )
type – Type of socket to be created
( SOCK_STREAM for TCP / SOCK_DGRAM for UDP )
protocol – Protocol to be used by the socket.
0 means use default protocol for the address family.
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
Assigns address to the unbound socket.
Arguments :
sockfd – File descriptor of a socket to be bonded
addr – Structure in which address to be bound to is specified
addrlen – Size of addr structure
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen)
Send a message on the socket
Arguments :
sockfd – File descriptor of the socket
buf – Application buffer containing the data to be sent
len – Size of buf application buffer
flags – Bitwise OR of flags to modify socket behavior
dest_addr – Structure containing the address of the destination
addrlen – Size of dest_addr structure
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen)
Receive a message from the socket.
Arguments :
sockfd – File descriptor of the socket
buf – Application buffer in which to receive data
len – Size of buf application buffer
flags – Bitwise OR of flags to modify socket behavior
src_addr – Structure containing source address is returned
addrlen – Variable in which size of src_addr structure is returned
int close(int fd)
Close a file descriptor
Arguments:
fd – File descriptor
In the below code, the exchange of one hello message between server and client
is shown to demonstrate the model.
Implement client server communication using UDP Socket
UDP CLIENT
#include<netinet/in.h>
#include<netdb.h>
#include<strings.h>
int main()
{
//variable to store the socket_id.
int clientsocket,port;
//variable to store the address.
struct sockaddr_in serveraddr;
//variableto store the address length.
socklen_t len;
//variable to store the network byte order address.
struct hostent *server;
char message[50];
//socket creation.
clientsocket=socket(AF_INET,SOCK_DGRAM,0);
//steps involved in the server address creation.
bzero((char*)&serveraddr,sizeof(serveraddr));
len=sizeof(serveraddr);
serveraddr.sin_family=AF_INET;
printf("Enter the port number ");
scanf("%d",&port);
serveraddr.sin_port=htons(port);
//server=gethostbyname("[Link]");
//bcopy((char*)server->h_addr,(char*)&serveraddr.sin_addr.s_addr,sizeof(server->h_addr));
fgets(message,2,stdin);
printf("\nSending message for server connection\n");
//sending message.
sendto(clientsocket,"HI I AM CLIENT...",sizeof("HI I AM CLIENT... "),0,(struct
sockaddr*)&serveraddr,sizeof(serveraddr));
printf("\nReceiving message from server.\n");
//receiving messages.
recvfrom(clientsocket,message,sizeof(message),0,(struct sockaddr*)&serveraddr,&len);
printf("\nMessage received:\t%s\n",message);
close(clientsocket);
}
UDP SERVER
#include<sys/types.h>
#include<netinet/in.h>
#include<netdb.h>
int main()
{
//variable to store the socket_id.
int serversocket,port;
//variable to store the network addresses.
struct sockaddr_in serveraddr,clientaddr;
//variable to store the address length.
socklen_t len;
char message[50];
//socket creation.
serversocket=socket(AF_INET,SOCK_DGRAM,0);
//steps involved in defining the serveraddress.
bzero((char*)&serveraddr,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
printf("Enter the port number ");
scanf("%d",&port);
serveraddr.sin_port=htons(port);
serveraddr.sin_addr.s_addr=INADDR_ANY;
//binding the socket to the operating system.
bind(serversocket,(struct sockaddr*)&serveraddr,sizeof(serveraddr));
printf("\nWaiting for the client connection\n");
bzero((char*)&clientaddr,sizeof(clientaddr));
len=sizeof(clientaddr);
//receiving message from the client.
recvfrom(serversocket,message,sizeof(message),0,(struct sockaddr*)&clientaddr,&len);
printf("\nConnection received from client.\n");
printf("\nThe client has send:\t%s\n",message);
printf("\nSending message to the client.\n");
//sending message to the client.
sendto(serversocket,"YOUR MESSAGE RECEIVED.",sizeof("YOUR MESSAGE
RECEIVED."),0,( struct sockaddr*)&clientaddr,sizeof(clientaddr));
close(serversocket);
}
SERVER OUTPUT
gcc udpserver.c -o server
./server
Enter the port number 5012
Waiting for the client connection
Connection received from client.
The client has send: HI I AM CLIENT...
Sending message to the client.
CLIENT OUTPUT
gcc udpclient.c -o client
./client
Enter the port number 5012
Sending message for server connection
Receiving message from server.
Message received: YOUR MESSAGE RECEIVED.