Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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
- #include "test.c"
- //the thread function
- void *connection_handler(void *);
- int main(int argc , char *argv[])
- {
- int socket_desc , client_sock , c , *new_sock;
- 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 = INADDR_ANY;
- server.sin_port = htons( 1920 );
- //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 , 4);
- //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);
- while( (client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) )
- {
- puts("Connection accepted");
- pthread_t sniffer_thread;
- new_sock = malloc(1);
- *new_sock = client_sock;
- if( pthread_create( &sniffer_thread , NULL , connection_handler , (void*) new_sock) < 0)
- {
- perror("could not create thread");
- return 1;
- }
- //Now join the thread , so that we dont terminate before the thread
- //pthread_join( sniffer_thread , 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[2000] , client_message[2000],log_info[100],command[50];
- int log=0;
- while(1>0){
- char id[50],password[50];
- if(log==0){
- strcpy(message," \nwellcome to MY_CHAT \n login \nuser:");
- write(sock,message,strlen(message));
- int correct_login=0;
- while(read_size=recv(sock,client_message,50,0)>=0){
- puts(client_message);
- strcpy(id,client_message);
- strcpy(message,"password:");
- write(sock,message,strlen(message));
- memset(client_message,0,50);
- if(read_size=recv(sock,client_message,50,0)<0){
- perror("recv failed");
- }
- strcpy(password,client_message);
- puts(client_message);
- memset(client_message,0,50);
- log=verify_log(id,password);
- if(log==1){
- //go_online(id);
- strcpy(message," \nyou are logged as:");
- strcat(message,id);
- strcat(message,"\n \n commands avaiable are : \n1. quit \n2. view_online (all online users)\n3. view_offline(all offline users)\n4. chat <username>\n5. view_hystory <user_name> \n \n");
- write(sock,message,strlen(message));
- break;
- }
- else {
- strcpy(message,"wrong login \n\n\n wellcome to MY_CHAT \n login \nuser:");
- write(sock,message,strlen(message));
- }
- }
- }
- else {
- if(read_size=recv(sock,command,50,0)<0){perror("recv error");}
- puts(command);
- if(strcmp(command,"quit")==0){
- log=0;
- //go_offline(id);
- }
- else {
- strcpy(message,"\n \n wrong command\n");
- write(sock,message,sizeof(message));
- }
- memset(command,0,50);
- }
- }
- //Free the socket pointer
- free(socket_desc);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement