You are on page 1of 12

TCP server(single client)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>

int main()
{
int sockfd,newsockfd;
char buffer[256];
struct sockaddr_in serv_addr;//structure containing internet address.
int n;

sockfd=socket(AF_INET,SOCK_STREAM,0);//specifies internet family stream


type,protocol(0) by default.

if(sockfd<0)
{
perror("ERROR opening socket");//sockfd is always +ve
exit(1);
}

serv_addr.sin_family=AF_INET;//components of sockaddr_in
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serv_addr.sin_port=htons(5033);//portno should be same for both client and server

bind(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));//binding of addresss


listen(sockfd,5);//maximum no of waiting clients

while(1)
{
newsockfd=accept(sockfd,(struct sockaddr *)NULL,NULL);
memset(buffer,0,256);//initialize buffer
n=read(newsockfd,buffer,255);//n stores no of characters read

write(1,"Received ",21);
write(1,buffer,n);

n=write(newsockfd,"message received",18);//n contains character written


close(newsockfd);
}
close(sockfd);//closes connection
return 0;
}

TCP server(multiple client)


#include <stdio.h>

#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

void readwrite(int);
int main()
{
int sockfd, newsockfd;
pid_t pid;//process id
struct sockaddr_in serv_addr;

sockfd = socket(AF_INET, SOCK_STREAM, 0);


if(sockfd<0)
{
perror("ERROR opening socket");
exit(1);
}

serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr =htonl(INADDR_ANY);
serv_addr.sin_port = htons(5020);

bind(sockfd, (struct sockaddr *) &serv_addr,sizeof(serv_addr));

listen(sockfd,5);

while(1)
{
newsockfd = accept(sockfd,(struct sockaddr *)NULL,NULL);

pid=fork();//since multiple clients each client is assosciated with a child process

if(pid==0)//fork returns 0 on success


{
close(sockfd);
readwrite(newsockfd);
exit(0);
}
else
close(newsockfd);
}
close(sockfd);
return 0;
}
void readwrite(int sock)
{
char buffer[256];
int n;
memset(buffer,'0',256);

n = read(sock,buffer,255);

write(1,"Received ",21);
write(1,buffer,n);

n = write(sock,"message received",18);
}

TCP client

#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>

int main()
{
int sockfd,n;
struct sockaddr_in serv_addr;
char buffer[256];

sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
perror("ERROR opening socket");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(5033);
serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//loopback address since both
client and server on same system

n=connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr));

memset(buffer,0,256);

printf("Enter Message");

fgets(buffer,255,stdin);gets input from screen.

n=write(sockfd,buffer,strlen(buffer));

memset(buffer,0,256);
n=read(sockfd,buffer,255);

write(1,"ACK",5);
write(1,buffer,n);

close(sockfd);
return 0;
}

UDP server(single client)


#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
int socketid,length,clientlength,senrec;
struct sockaddr_in server;
struct sockaddr_in client;

char buffer[256];
socketid=socket(AF_INET,SOCK_DGRAM,0);//stream changes since udp
length=sizeof(server);
memset(&server,0,length);
server.sin_family=AF_INET;
server.sin_addr.s_addr=htonl(INADDR_ANY);
server.sin_port=htons(5060);

senrec=bind(socketid,(struct sockaddr *)&server,length);


clientlength=sizeof(struct sockaddr_in);
while(1)
{

senrec=recvfrom(socketid,buffer,256,0,(struct sockaddr *)&client,&clientlength);//no


bind no connection setup direct sendrec
write(1,"received a datagram:",21);
write(1,buffer,senrec);
senrec=sendto(socketid,"got your message\n",17,0,(struct sockaddr
*)&client,clientlength);

close(socketid);
return 0;
}

UDP server(multi client)

#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<stdio.h>

#include<stdlib.h>
#include<string.h>

int main()
{
int socketid,length,clientlength,senrec;
struct sockaddr_in server;
struct sockaddr_in client;
pid_t pid;
char buffer[256];
socketid=socket(AF_INET,SOCK_DGRAM,0);
length=sizeof(server);
memset(&server,0,length);
server.sin_family=AF_INET;
server.sin_addr.s_addr=htonl(INADDR_ANY);
server.sin_port=htons(5090);

senrec=bind(socketid,(struct sockaddr *)&server,length);


clientlength=sizeof(struct sockaddr_in);

while(1)
{
senrec=recvfrom(socketid,buffer,256,0,(struct sockaddr *)&client,&clientlength);

pid=fork();//same as for tcp multi client scenario

if(pid==0)
{

write(1,"Received a datagram",21);
write(1,buffer,senrec);
senrec=sendto(socketid,"got your message\n",17,0,(struct sockaddr
*)&client,clientlength);
}
}
close(socketid);
return 0;
}

Udp client
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<netdb.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<arpa/inet.h>

int main()
{
int socketid,length,senrec;
struct sockaddr_in server,client;
char buf[256];
socketid=socket(AF_INET,SOCK_DGRAM,0);
server.sin_family=AF_INET;
server.sin_port=htons(5090);
server.sin_addr.s_addr=inet_addr("127.0.0.1");
length=sizeof(struct sockaddr_in);
memset(buf,0,256);

printf("enter message");
fgets(buf,255,stdin);

senrec=sendto(socketid,buf,strlen(buf),0,(struct sockaddr *)&server,length);


senrec=recvfrom(socketid,buf,256,0,(struct sockaddr *)&client,&length);

write(1,"ACK",5);
write(1,buf,senrec);
close(socketid);
return 0;
}

You might also like