This is the first post in network programming program series.
All programs are tested in SUSE Linux Enterprise Server 10 (i586) VERSION = 10 PATCHLEVEL = 2. For how to check the distribution of linux you are running, read this.
The server serves the client one after the other in iterative fashion.
Server program:
All programs are tested in SUSE Linux Enterprise Server 10 (i586) VERSION = 10 PATCHLEVEL = 2. For how to check the distribution of linux you are running, read this.
The server serves the client one after the other in iterative fashion.
Server program:
//SERVER PROGRAM: P1daytimeserver.c //gives current server time to clients #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <string.h> #include <time.h> #define BACKLOG 10 int main(int argc,char **argv) { int listenfd,connfd; struct sockaddr_in servaddr; char buff[1000]; time_t ticks; //server admin provides the servers IP address and port number if(argc != 2) { printf("Error with arguments!!! Usage:%s <portno>\n", argv[0]); exit(0); } //STEP 1: socket function listenfd = socket(AF_INET,SOCK_STREAM,0); printf("SERVER: Listening socket opened with listenfd = %d\n",listenfd); //STEP 2: initialize address structure bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(atoi(argv[1])); //STEP 3: bind (int) listenfd and (struct sockaddr_in) servaddr bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); //STEP 4: start listening to client requests listen(listenfd,BACKLOG); for( ; ; ) { //accept client request connfd = accept(listenfd,(struct sockaddr *)NULL,NULL); printf("SERVER: Connection established with connfd=%d\n", connfd); //prepare data to be sent to connected client ticks = time(NULL);//read current time on server snprintf(buff,sizeof(buff),"%.24s\r\n--ByMonishGupta\r\n",ctime(&ticks)); //send data to client write(connfd,buff,strlen(buff)); //end client connection close(connfd); } //end listening socket close(listenfd); }Client program:
#include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char **argv){ int sockfd,n=0; char recvline[1000+1]; struct sockaddr_in servaddr; //client provides the servers IP address and port number if(argc != 3) { printf("Error with arguments!!! Usage:%s <IPv4 address of server> <portno>\n", argv[0]); exit(0); } //STEP 1: create socket if( (sockfd = socket(AF_INET,SOCK_STREAM,0)) < 0) { printf("Socket Error!!!"); exit(0); }else //printf("CLIENT:Client sockfd = %d\n",sockfd); //STEP 2: create server address structure bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(atoi(argv[2])); servaddr.sin_addr.s_addr = inet_addr(argv[1]); //connect to server int conn_status = connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); if(conn_status<0) { printf("CLIENT:connection function returns %d\n",conn_status); printf("Connect Error!!!"); close(sockfd); exit(0); } else { //connection successful //read from server and print to client's stdout while( (n=read(sockfd,recvline,1000))>0) { recvline[n] = 0; /* null terminate */ if(fputs(recvline,stdout) == EOF) { printf("fputs error!!!"); close(sockfd); exit(0); } } } if(n<0) { printf("read error!!!"); close(sockfd); exit(0); } close(sockfd); }More to come: Same program but server program with concurrent design.
Cheers and try hosting at Linode.
Hey it throws an error message.Is this the correct code?
ReplyDeleteHey it throws an error message.Is this the correct code?
ReplyDeleteDishant, What error are you getting?
Delete