Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

In the C programming language, how should I go about writing two programs (sende

ID: 3808791 • Letter: I

Question

In the C programming language, how should I go about writing two programs (sender & reciever) which create a reliable communication protocol to demonstrate reliable unicast using UDP? The sender program runs on one host and reads data files as input, and breaks the contents into UDP datagrams. The receiver should simulate unreliable communication by randomly dropping a percentage of incoming packets. Acknowledgements, retransmission, packet resequencing, and timeouts should all be taken into consideration.

Explanation / Answer

Basically the requirement of the given question leads to chat application. So in this section we will design a chat application using UDP for reliable communication.

Here is the code:

SERVER

#include<stdio.h>

#include<netinet/in.h>

#include<sys/types.h>

#include<sys/socket.h>

#include<netdb.h>

#include<string.h>

#include<stdlib.h>

#define MAX 80

#define PORT 43454

#define SA struct sockaddr

void func(int sockfd)

{

char buff[MAX];

int n,clen;

struct sockaddr_in cli;

clen=sizeof(cli);

for(;;)

{

bzero(buff,MAX);

recvfrom(sockfd,buff,sizeof(buff),0,(SA *)&cli,&clen);

printf("From client %s To client",buff);

bzero(buff,MAX);

n=0;

while((buff[n++]=getchar())!=' ');

sendto(sockfd,buff,sizeof(buff),0,(SA *)&cli,clen);

if(strncmp("exit",buff,4)==0)

{

printf("Server Exit... ");

break;

}

}

}

int main()

{

int sockfd;

struct sockaddr_in servaddr;

sockfd=socket(AF_INET,SOCK_DGRAM,0);

if(sockfd==-1)

{

printf("socket creation failed... ");

exit(0);

}

else

printf("Socket successfully created.. ");

bzero(&servaddr,sizeof(servaddr));

servaddr.sin_family=AF_INET;

servaddr.sin_addr.s_addr=htonl(INADDR_ANY);

servaddr.sin_port=htons(PORT);

if((bind(sockfd,(SA *)&servaddr,sizeof(servaddr)))!=0)

{

printf("socket bind failed... ");

exit(0);

}

else

printf("Socket successfully binded.. ");

func(sockfd);

close(sockfd);

}

CLIENT

#include<sys/socket.h>

#include<netdb.h>

#include<string.h>

#include<stdlib.h>

#include<stdio.h>

#define MAX 80

#define PORT 43454

#define SA struct sockaddr

int main()

{

char buff[MAX];

int sockfd,len,n;

struct sockaddr_in servaddr;

sockfd=socket(AF_INET,SOCK_DGRAM,0);

if(sockfd==-1)

{

printf("socket creation failed... ");

exit(0);

}

else

printf("Socket successfully created.. ");

bzero(&servaddr,sizeof(len));

servaddr.sin_family=AF_INET;

servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");

servaddr.sin_port=htons(PORT);

len=sizeof(servaddr);

for(;;)

{

printf(" Enter string : ");

n=0;

while((buff[n++]=getchar())!=' ');

sendto(sockfd,buff,sizeof(buff),0,(SA *)&servaddr,len);

bzero(buff,sizeof(buff));

recvfrom(sockfd,buff,sizeof(buff),0,(SA *)&servaddr,&len);

printf("From Server : %s ",buff);

if(strncmp("exit",buff,4)==0)

{

printf("Client Exit... ");

break;

}

}

close(sockfd);

}

Sample Output Section

SERVER SIDE

$ cc udpchatserver.c

$ ./a.out

Socket successfully created..

Socket successfully binded..

From client hai

To client hello

From client exit

To client exit

Server Exit...

$

CLIENT SIDE

$ cc udpchatclient.c

$ ./a.out

Socket successfully created..

Enter string : hai

From Server : hello

Enter string : exit

From Server : exit

Client Exit...

$