struct
sockaddr_in
{
/* structure to hold an address
U_char
sin_len; /* total length
U_short
sin_family; /* type of address
U_short
sin_port; /*protocol port number
Struct
in_addr sin_addr; /* IP Address
}
struct
sockaddr_in obj
obj.sin_family=AF_INET;
obj.sin_port=portnumber
obj.sin_addr.s_addr=inet_addr(“IP
Addrress”)/ INADDR_ANY;
INADDR_ANY-
Adress which allows the socket to receive packets from any of the
machines IP address.
Inet_addr-
takes an ASCII string that contains a dotted decimal address snd
returns equivalent IP address in binary
socket(int socket_family,
int socket_type,
int protocol);
Protocol family, protocol, number
example:
sock=socket(AF_INET,SOCK_STREAM,0);
bind(int socket,
const struct sockaddr *address,socklen_t address_len);
ret=bind(sock,(struct
sockaddr*)&obj,sizeof(obj)); //Binding socket
accept(int socket,
const struct sockaddr *address,socklen_t address_len);
newsock=accept(sock,(struct
sockaddr*)&obj,&z); //Accepting the client
listen(socket,
int backlog);
backlog means no of clients it connect to.
ret=listen(sock,1);
//listening for 1 client connection
connect(int socket,
const struct sockaddr *address,socklen_t address_len);
ret=connect(sock,(struct
sockaddr*)&obj,sizeof(obj)); //Requesting to Connect with server
recv(newsock,&n,sizeof(n),0);
ret=recv(sock,&f,sizeof(f),0);
send(newsock,&n,sizeof(n),0);
ret=send(sock,&f,sizeof(f),0);
UDP
SOCKET
Client Server
bind
sendto() recvfrom()
recvfrom()
sendto()
sample programs
1. String Reverse
Server program
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main(int argc,char* argv[])
{
int sock,newsock,i;
int count=0;
struct sockaddr_in obj;
int z,ret,n,j=0;
char msg1[50],b[50];
obj.sin_family=AF_INET;
obj.sin_port=atoi(argv[1]);
obj.sin_addr.s_addr=INADDR_ANY;
sock=socket(AF_INET,SOCK_STREAM,0);
ret=bind(sock,(struct sockaddr*)&obj,sizeof(obj));
if(ret<0)
{
printf("\nBinding Failed\n");
close(sock);
exit(EXIT_FAILURE);
}
ret=listen(sock,1);
newsock=accept(sock,(struct sockaddr*)&obj,&z);
if(newsock<0)
{
printf("\nAccept Failed\n");
close(sock);
exit(EXIT_FAILURE);
}
ret=recv(newsock,&msg1,sizeof(msg1),0);
n=strlen(msg1);
for(i=n-1;i>=0;i--)
{
b[j++]=msg1[i];
}
b[j]='\0';
printf("reverse of string is\n");
puts(b);
//printf("reverse is %s",msg2);
close(sock); }
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main(int argc,char* argv[])
{
int sock,newsock,i;
int count=0;
struct sockaddr_in obj;
int z,ret,n,j=0;
char msg1[50],b[50];
obj.sin_family=AF_INET;
obj.sin_port=atoi(argv[1]);
obj.sin_addr.s_addr=INADDR_ANY;
sock=socket(AF_INET,SOCK_STREAM,0);
ret=bind(sock,(struct sockaddr*)&obj,sizeof(obj));
if(ret<0)
{
printf("\nBinding Failed\n");
close(sock);
exit(EXIT_FAILURE);
}
ret=listen(sock,1);
newsock=accept(sock,(struct sockaddr*)&obj,&z);
if(newsock<0)
{
printf("\nAccept Failed\n");
close(sock);
exit(EXIT_FAILURE);
}
ret=recv(newsock,&msg1,sizeof(msg1),0);
n=strlen(msg1);
for(i=n-1;i>=0;i--)
{
b[j++]=msg1[i];
}
b[j]='\0';
printf("reverse of string is\n");
puts(b);
//printf("reverse is %s",msg2);
close(sock); }
Client program (String Reverse)
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
main(int argc,char* argv[])
{
int sock;
struct sockaddr_in obj;
int z,ret,n;
char msg[50];
obj.sin_family=AF_INET;
obj.sin_port=atoi(argv[1]);
obj.sin_addr.s_addr=INADDR_ANY;
sock=socket(AF_INET,SOCK_STREAM,0);
ret=connect(sock,(struct sockaddr*)&obj,sizeof(obj));
if(ret<0)
{
printf("\nConnection Failed\n");
close(sock);
exit(EXIT_FAILURE);
}
printf("\n Enter the string : ");
gets(msg);
ret=send(sock,&msg,sizeof(msg),0);
close(sock); }
2. String Reverse
Server code for word count in a string
n=strlen(msg1);
for(i=0;i<n;i++)
{
if(msg1[i]==' ')
count++;
}
printf("n is %d",n);
printf("word count is %d",count+1);
for(i=0;i<n;i++)
{
if(msg1[i]==' ')
count++;
}
printf("n is %d",n);
printf("word count is %d",count+1);
3. File Transfer
Server code for File Transfer
fp=fopen("sample","w");
while(recv(newsock,msg,sizeof(msg),0))
{
puts(msg);
fputs(msg,fp);
}
while(recv(newsock,msg,sizeof(msg),0))
{
puts(msg);
fputs(msg,fp);
}
Client code for File Transfer
fp=fopen("clientfile.txt","r");
while(!feof(fp))
{
fgets(msg,sizeof(msg),fp);
ret=send(sock,msg,sizeof(msg),0);
fp=fopen("clientfile.txt","r");
while(!feof(fp))
{
fgets(msg,sizeof(msg),fp);
ret=send(sock,msg,sizeof(msg),0);
}
4. ARP simulation
create a file with following data
172.16.31.5 EB:FE:AB:00:20:43
172.16.31.6 EB:FE:AB:00:20:44
172.16.31.7 EB:FE:AB:00:20:45
172.16.31.6 EB:FE:AB:00:20:44
172.16.31.7 EB:FE:AB:00:20:45
Code for retreiving mac addres for given IP
#include<stdio.h>
main()
{
FILE *fp;
char ip1[25],ip[25],mac[25];
fp=fopen("ip.txt","r");
printf("Enter ip");
scanf("%s",ip1);
puts(ip1);
while(!feof(fp))
{
fscanf(fp,"%s",ip);
fscanf(fp,"%s",mac);
if(strcmp(ip1,ip)==0)
{
puts(mac);
}
}
}
main()
{
FILE *fp;
char ip1[25],ip[25],mac[25];
fp=fopen("ip.txt","r");
printf("Enter ip");
scanf("%s",ip1);
puts(ip1);
while(!feof(fp))
{
fscanf(fp,"%s",ip);
fscanf(fp,"%s",mac);
if(strcmp(ip1,ip)==0)
{
puts(mac);
}
}
}
