Advertisement
Guest User

server1.c

a guest
May 16th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.37 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.  
  9. void *login_handler(void *);
  10.  
  11. int main(int argc , char *argv[])
  12. {
  13. int flag=0 , socket_desc , new_socket , c , *new_sock;
  14. struct sockaddr_in server , client;
  15. char *message;
  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.  
  24. //Prepare the sockaddr_in structure
  25. server.sin_family = AF_INET;
  26. server.sin_addr.s_addr = INADDR_ANY;
  27. server.sin_port = htons( 8888 );
  28.  
  29. //Bind
  30. if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
  31. {
  32. puts("bind failed");
  33. return 1;
  34. }
  35. puts("Bind done");
  36.  
  37. //Listen
  38. listen(socket_desc , 3);
  39.  
  40. //Accept and incoming connection
  41. puts("Waiting for incoming connections...");
  42. c = sizeof(struct sockaddr_in);
  43. while( (new_socket = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c)) )
  44. {
  45. puts("Connection accepted");
  46.  
  47. //Reply to the client
  48. message = "Welcome,you are now connected.\n";
  49. write(new_socket , message , 2000);
  50.  
  51. pthread_t sniffer_thread;
  52. new_sock = malloc(1);
  53. *new_sock = new_socket;
  54. if( pthread_create( &sniffer_thread , NULL , login_handler , (void*) new_sock) < 0)
  55. {
  56. perror("could not create thread");
  57. return 1;
  58. }
  59. while ( flag == 1 )
  60. {
  61. if( pthread_create( &sniffer_thread , NULL , login_handler , (void*) new_sock) < 0)
  62. {
  63. perror("could not create thread");
  64. return 1;
  65. }
  66. }
  67. //Now join the thread , so that we dont terminate before the thread
  68. //pthread_join( sniffer_thread , NULL);
  69. puts("Authentication progress iniciated.");
  70.  
  71.  
  72. }
  73.  
  74. if (new_socket<0)
  75. {
  76. perror("accept failed");
  77. return 1;
  78. }
  79.  
  80. return 0;
  81. }
  82.  
  83. /*
  84. * This will handle connection for each client
  85. * */
  86. void *login_handler(void *socket_desc)
  87. {
  88. //Get the socket descriptor
  89. int sock = *(int*)socket_desc;
  90. int option , password , client_nummessage[2000];
  91. char username , *message , client_message[2000];
  92.  
  93. //Send some messages to the client
  94. message = "Welcome to NTF.\n";
  95. write(sock , message , 2000);
  96.  
  97. message = "What do you want to do?.\n";
  98. write(sock , message , 2000);
  99.  
  100. message = "1-Login.\n2-Create new account.\n3-Exit NTF.\n";
  101. write(sock , message , 2000);
  102.  
  103. //Receive a message from client
  104. recv(sock , client_nummessage , 1 , 0);
  105.  
  106. if (*client_nummessage == 1)
  107. {
  108. puts("Login request.Requesting username and password.");
  109.  
  110. message = "Please insert username.\n->";
  111. write(sock , message , 2000);
  112.  
  113. recv(sock , client_message , 2000 , 0);
  114. //verificar se user existe. se existir,pedir passe.
  115.  
  116. printf("%s",client_message);
  117.  
  118. message = "Please insert password.\n->";
  119. write(sock , message , 2000);
  120.  
  121. recv(sock , client_message , 5 , 0);
  122. //se a passe estiver correta,deu login no sistema. dar return 1 e passar a menu_handler.
  123. printf("%s",client_message);
  124. }
  125.  
  126. else if (*client_nummessage == 2)
  127. {
  128. message = "Please insert desired username. \n->";
  129. write(sock , message , strlen(message));
  130.  
  131. username = recv(sock , client_message , 2000 , 0);
  132. //verificar se o username existe. se existir, continuar.
  133.  
  134. message = "Please insert password. \n->";
  135. write(sock , message , strlen(message));
  136.  
  137. password = recv(sock , client_message , 2000 , 0);
  138. //verificar requerimentos da passe(opcional)
  139.  
  140. //se ambas as credenciais estiverem corretas, repetir o login_handler.
  141. }
  142.  
  143. else if (*client_nummessage == 3)
  144. {
  145. free(socket_desc);
  146. }
  147.  
  148. else
  149. {
  150. message = "Invalid option. \n->";
  151. write(sock , message , strlen(message));
  152. }
  153.  
  154. //Free the socket pointer
  155. free(socket_desc);
  156.  
  157. return 0;
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement