/* C socket server example, handles multiple clients using threads Compile gcc server.c -lpthread -o server */ #include <stdio.h> #include <string.h> //strlen #include <stdlib.h> //strlen #include <sys/socket.h> #include <arpa/inet.h> //inet_addr #include <unistd.h> //write #include <pthread.h> //for threading , link with lpthread //the thread function void *connection_handler(void *); int main(int argc , char *argv[]) { int socket_desc , client_sock , c; struct sockaddr_in server , client; //Create socket socket_desc = socket(AF_INET , SOCK_STREAM , 0); if (socket_desc == -1) { printf("Could not create socket"); } puts("Socket created"); //Prepare the sockaddr_in structure server.sin_family = AF_INET; server.sin_addr.s_addr = inet_addr("127.0.0.1"); server.sin_port = htons( 8888 ); //Bind if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0) { //print the error message perror("bind failed. Error"); return 1; } puts("bind done"); //Listen listen(socket_desc , 3); //Accept and incoming connection puts("Waiting for incoming connections..."); c = sizeof(struct sockaddr_in); //Accept and incoming connection puts("Waiting for incoming connections..."); c = sizeof(struct sockaddr_in); pthread_t thread_id; while( (client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) ) { puts("Connection accepted"); if( pthread_create( &thread_id , NULL , connection_handler , (void*) &client_sock) < 0) { perror("could not create thread"); return 1; } //Now join the thread , so that we dont terminate before the thread //pthread_join( thread_id , NULL); puts("Handler assigned"); } if (client_sock < 0) { perror("accept failed"); return 1; } return 0; } /* * This will handle connection for each client * */ void *connection_handler(void *socket_desc) { //Get the socket descriptor int sock = *(int*)socket_desc; int read_size; char *message , client_message[2000]; //Send some messages to the client message = "Greetings! I am your connection handler\n"; write(sock , message , strlen(message)); message = "Now type something and i shall repeat what you type \n"; write(sock , message , strlen(message)); //Receive a message from client while( (read_size = recv(sock , client_message , 2000 , 0)) > 0 ) { //end of string marker client_message[read_size] = '\0'; //Send the message back to client write(sock , client_message , strlen(client_message)); //clear the message buffer memset(client_message, 0, 2000); } if(read_size == 0) { puts("Client disconnected"); fflush(stdout); } else if(read_size == -1) { perror("recv failed"); } return 0; } /* C socket client example, handles multiple clients using threads Compile gcc -o client client.c run using --> ./client */ #include <stdio.h> #include <sys/types.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> void error(char *msg) { perror(msg); exit(0); } int main(int argc, char *argv[]) { int sockfd, portno, n,p,count=0; struct sockaddr_in serv_addr; char buff[256],client[100],temp_buff[100]; FILE *id; id = popen("id -n -u","r"); fgets(client,100,id); strtok(client,"\n"); portno = 8888; bzero((char *) &serv_addr, sizeof(serv_addr)); sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(portno); serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); //getnameinfo((struct sockaddr *)&serv_addr, sizeof serv_addr, host, sizeof host, service, sizeof service, 0); if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) error("ERROR connecting"); while(1) { if (count == 0) { p = write(sockfd,client,strlen(client)); if (p < 0) error("ERROR writing to socket"); bzero(temp_buff,sizeof(temp_buff)); n = read(sockfd,temp_buff,99); if (n < 0) error("ERROR reading from socket"); count++; } else { printf("%s: ",client); bzero(buff,256); fgets(buff,255,stdin); n = write(sockfd,buff,strlen(buff)); if (n < 0) error("ERROR writing to socket"); if (buff[0] == 'q') { close(sockfd); break; } n = read(sockfd,buff,255); if (n < 0) error("ERROR reading from socket"); printf("%s:%s",temp_buff,buff); } } return 0; }
Showing posts with label C CODE FOR SOCET PROGRAMMING. Show all posts
Showing posts with label C CODE FOR SOCET PROGRAMMING. Show all posts
Friday, 19 February 2016
Socket programming in C using Threads
Saturday, 31 May 2014
SOCKET PROGRAMMING FOR SINGLE USER-MULTI CLIENT IN C LANGUAGE
THIS PROGRAM FOR SINGLE SERVER-MULTI CLIENT IN SAME NETWORK.IF YOU WANT TO MAKE THIS CODE FOR DIFFERENT SYSTEM THEN YOU NEED TO CHANGE IP ADDRESS OF ACCORDING TO SERVER'S IP ADDRESS
SERVER PROGRAM
CLIENT PROGRAM
/********************************************************************************/
/* Title :: Client Socket Programm */
/* */
/* This is CLIENT program */
/* */
/* Auther : Kaneria Dhaval */
/* */
/* Usage : ~$ gcc -w -o client client.c */
/* ./client */
/* */
/********************************************************************************/
SERVER PROGRAM
#include<sys/socket.h> #include<sys/types.h> #include<netinet/in.h> #include<stdlib.h> #include<stdio.h> #include<string.h> int main() { int sockfd,confd,n,clilen; char buff[256]; struct sockaddr_in server, client; sockfd =socket(AF_INET,SOCK_STREAM,0); printf("Socket OK.\n"); server.sin_family = AF_INET; server.sin_port = htons(9000); server.sin_addr.s_addr = inet_addr("127.0.0.1"); bind(sockfd,(struct sockaddr*)&server,sizeof(server)); printf("Bind OK.\n"); listen(sockfd,4); printf("Listening OK.\n\n"); clilen=sizeof(client); //confd=accept(sockfd,(struct sockaddr*)&client,&clilen); //printf("Accept OK.\n"); while(1) { confd=accept(sockfd,(struct sockaddr*)&client,&clilen); printf("Accept OK.\n"); printf("Waiting for Client's Message.\n"); bzero(buff,256); n = read(confd,buff,256); if(buff[0]=='q') { close(confd); break; } printf("CLIENT : %s",buff); n = write(confd,"Message Received.",17); } close(sockfd); }
CLIENT PROGRAM
/********************************************************************************/
/* Title :: Client Socket Programm */
/* */
/* This is CLIENT program */
/* */
/* Auther : Kaneria Dhaval */
/* */
/* Usage : ~$ gcc -w -o client client.c */
/* ./client */
/* */
/********************************************************************************/
#include<sys/socket.h> #include<sys/types.h> #include<netinet/in.h> #include<stdlib.h> #include<stdio.h> #include<string.h> int main(){ int sockfd,confd,n,len; char buff[256]; struct sockaddr_in server,client; len = sizeof(struct sockaddr_in); sockfd = socket(AF_INET, SOCK_STREAM, 0); printf("Socket OK.\n"); server.sin_family = AF_INET; server.sin_port = htons(9000); server.sin_addr.s_addr = inet_addr("127.0.0.1"); confd=connect(sockfd,(struct sockaddr*)&server,sizeof(server)); printf("Connection OK.\n"); while(1) { printf("\nMessage : "); fgets(buff,256,stdin); n=write(sockfd,buff,strlen(buff)); printf("> Message Sent.\n"); if(buff[0]=='q') { close(confd); break; } bzero(buff,sizeof(buff));n=read(sockfd,buff,sizeof(buff)); printf("Server : %s",buff); } close(sockfd); return 0; }
Subscribe to:
Posts (Atom)