Advertisement
Guest User

Untitled

a guest
Jan 10th, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.95 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h> //strlen
  3. #include<stdlib.h> //strlen
  4. #include<sys/socket.h>
  5. #include<arpa/inet.h> //inet_addr
  6. #include<unistd.h> //write
  7. #include<pthread.h> //for threading , link with lpthread
  8. #include "test.c"
  9. //the thread function
  10. void *connection_handler(void *);
  11.  
  12. int main(int argc , char *argv[])
  13. {
  14. int socket_desc , client_sock , c , *new_sock;
  15. struct sockaddr_in server , client;
  16.  
  17. //Create socket
  18. socket_desc = socket(AF_INET , SOCK_STREAM , 0);
  19. if (socket_desc == -1)
  20. {
  21. printf("Could not create socket");
  22. }
  23. puts("Socket created");
  24.  
  25. //Prepare the sockaddr_in structure
  26. server.sin_family = AF_INET;
  27. server.sin_addr.s_addr = INADDR_ANY;
  28. server.sin_port = htons( 1920 );
  29.  
  30. //Bind
  31. if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
  32. {
  33. //print the error message
  34. perror("bind failed. Error");
  35. return 1;
  36. }
  37. puts("bind done");
  38.  
  39. //Listen
  40. listen(socket_desc , 4);
  41.  
  42. //Accept and incoming connection
  43. puts("Waiting for incoming connections...");
  44. c = sizeof(struct sockaddr_in);
  45.  
  46.  
  47. //Accept and incoming connection
  48. puts("Waiting for incoming connections...");
  49. c = sizeof(struct sockaddr_in);
  50. while( (client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) )
  51. {
  52. puts("Connection accepted");
  53.  
  54. pthread_t sniffer_thread;
  55. new_sock = malloc(1);
  56. *new_sock = client_sock;
  57.  
  58. if( pthread_create( &sniffer_thread , NULL , connection_handler , (void*) new_sock) < 0)
  59. {
  60. perror("could not create thread");
  61. return 1;
  62. }
  63.  
  64. //Now join the thread , so that we dont terminate before the thread
  65. //pthread_join( sniffer_thread , NULL);
  66. puts("Handler assigned");
  67. }
  68.  
  69. if (client_sock < 0)
  70. {
  71. perror("accept failed");
  72. return 1;
  73. }
  74.  
  75. return 0;
  76. }
  77.  
  78. /*
  79. * This will handle connection for each client
  80. * */
  81. void *connection_handler(void *socket_desc)
  82. {
  83. //Get the socket descriptor
  84. int sock = *(int*)socket_desc;
  85. int read_size;
  86. char message[2000] , client_message[2000],log_info[100],command[50];
  87.  
  88. int log=0;
  89. while(1>0){
  90. char id[50],password[50];
  91. if(log==0){
  92. strcpy(message," \nwellcome to MY_CHAT \n login \nuser:");
  93. write(sock,message,strlen(message));
  94. int correct_login=0;
  95. while(read_size=recv(sock,client_message,50,0)>=0){
  96.  
  97. puts(client_message);
  98.  
  99. strcpy(id,client_message);
  100. strcpy(message,"password:");
  101.  
  102. write(sock,message,strlen(message));
  103. memset(client_message,0,50);
  104. if(read_size=recv(sock,client_message,50,0)<0){
  105. perror("recv failed");
  106.  
  107. }
  108.  
  109.  
  110. strcpy(password,client_message);
  111.  
  112. puts(client_message);
  113. memset(client_message,0,50);
  114. log=verify_log(id,password);
  115.  
  116. if(log==1){
  117. //go_online(id);
  118. strcpy(message," \nyou are logged as:");
  119. strcat(message,id);
  120. 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");
  121. write(sock,message,strlen(message));
  122. break;
  123. }
  124.  
  125. else {
  126. strcpy(message,"wrong login \n\n\n wellcome to MY_CHAT \n login \nuser:");
  127. write(sock,message,strlen(message));
  128. }
  129.  
  130. }
  131. }
  132.  
  133. else {
  134. if(read_size=recv(sock,command,50,0)<0){perror("recv error");}
  135. puts(command);
  136. if(strcmp(command,"quit")==0){
  137. log=0;
  138. //go_offline(id);
  139. }
  140. else {
  141. strcpy(message,"\n \n wrong command\n");
  142. write(sock,message,sizeof(message));
  143. }
  144.  
  145. memset(command,0,50);
  146. }
  147.  
  148. }
  149.  
  150. //Free the socket pointer
  151. free(socket_desc);
  152.  
  153. return 0;
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement