/* This is a server program: server.
c
* compile with: cc -o server server.c */
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<stdio.h>
#define TRUE 1
main(){
int soc,len;
char buf[1024];
struct sockaddr_in server,client;
int msgsock,addrlen=sizeof(client);
soc=socket(AF_INET, SOCK_STREAM,0);
if(soc<0){
perror("\n Error in openig socket..."); exit(1);
}
server.sin_family=AF_INET;
server.sin_addr.s_addr=htonl(INADDR_ANY);
server.sin_port=0;
if(bind(soc,(struct sockaddr *)&server,sizeof(server))){
perror("\n Error in bind..."); exit(2);
}
len=sizeof(server);
if(getsockname(soc,(struct sockaddr *)&server,&len)){
perror("\n Error in getting port..."); exit(3);
}
printf("\n Socket has port# %hd\n", ntohs(server.sin_port));
listen(soc,5);
do{
msgsock=accept(soc,(struct sockaddr *)&client,&addrlen);
if(msgsock==-1){
perror("\n Error in accept");exit(0);
}
else
read(msgsock,buf,1024);
printf("\n message from client::\n%s\n", buf);
}while(TRUE);
}
/* This is a client program: client.c
* compile with: cc -o client client.c */
#include<sys/types.h>/* contain data types such as u_short */
#include<sys/socket.h>/*all socket sys call */
#include<netinet/in.h>/* it contain socket address stuct */
#include<netdb.h>/* the function getsockname()*/
#include<stdio.h>
#include<string.h>
#include<arpa/inet.h>
/* convert IP add from decimal to 32 bits memory word */
main(int argc, char *argv[]){
int soc, addrlen;
char buf[1024];
struct sockaddr_in server;
soc=socket(AF_INET, SOCK_STREAM,0);
if(soc<0){
perror("\n Error in openig socket...");
exit(1);
}
server.sin_family=AF_INET;
server.sin_addr.s_addr=inet_addr(argv[1]);
server.sin_port=htons(atoi(argv[2]));
if(connect(soc,(struct sockaddr *)&server,sizeof(server))<0){
perror("\n Error in connection..."); exit(2);
}
addrlen=sizeof(server);
scanf("%[^\n]",buf);
write(soc, buf,1024);
close(soc);
}