Question

In the C programming language, how should I go about writing two programs (sender & reciever)...

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.

Homework Answers

Answer #1

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())!='\n');

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

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

{

printf("Server Exit...\n");

break;

}

}

}

int main()

{

int sockfd;

struct sockaddr_in servaddr;

sockfd=socket(AF_INET,SOCK_DGRAM,0);

if(sockfd==-1)

{

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

exit(0);

}

else

printf("Socket successfully created..\n");

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...\n");

exit(0);

}

else

printf("Socket successfully binded..\n");

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...\n");

exit(0);

}

else

printf("Socket successfully created..\n");

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("\nEnter string : ");

n=0;

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

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\n",buff);

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

{

printf("Client Exit...\n");

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...

$

Know the answer?
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for?
Ask your own homework help question
Similar Questions