Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include <errno.h>
  6. #include <stdbool.h>
  7.  
  8. #include <sys/types.h>
  9. #include <sys/socket.h>
  10. #include <netinet/in.h>
  11. #include <netdb.h>
  12.  
  13. #include <pthread.h>
  14.  
  15. /* mutex declaration */
  16. pthread_mutex_t keyy;
  17.  
  18.  
  19. /* Server port */
  20. #define PORT 4040
  21.  
  22.  
  23. /* Buffer length */
  24. #define BUFFER_LENGTH 4096
  25.  
  26. /* File descriptors of client and server */
  27. int serverfd, clientfd;
  28.  
  29. char buffer[BUFFER_LENGTH];
  30. char buffer2[BUFFER_LENGTH];
  31.  
  32. void* recebeMsg(){
  33. int message_len;
  34. while(1){
  35. memset(buffer, 0x0, BUFFER_LENGTH);
  36. pthread_mutex_lock(&keyy);
  37. if((message_len = recv(clientfd, buffer, BUFFER_LENGTH, MSG_DONTWAIT)) > 0) {
  38. buffer[message_len - 1] = '';
  39. printf("Client says: %sn", buffer);
  40. }
  41. pthread_mutex_unlock(&keyy);
  42. }
  43. }
  44.  
  45.  
  46.  
  47. void* enviaMsg(){
  48. while(1){
  49. memset(buffer2, 0x0, BUFFER_LENGTH);
  50. fgets(buffer2, BUFFER_LENGTH, stdin);
  51. //sleep(0.5);
  52. pthread_mutex_lock(&keyy);
  53. send(clientfd, buffer2, strlen(buffer2), 0);
  54. pthread_mutex_unlock(&keyy);
  55. }
  56. }
  57.  
  58. /*
  59. * Main execution of the server program of the simple protocol
  60. */
  61. int main() {
  62.  
  63. if (pthread_mutex_init(&keyy, NULL) != 0)
  64. {
  65. printf("n mutex initalization failedn");
  66. return -1;
  67. }
  68.  
  69. /* Client and Server socket structures */
  70. struct sockaddr_in client, server;
  71.  
  72. char buffer[BUFFER_LENGTH];
  73. char buffer2[BUFFER_LENGTH];
  74.  
  75. fprintf(stdout, "Starting servern");
  76.  
  77. /* Creates a IPv4 socket */
  78. serverfd = socket(AF_INET, SOCK_STREAM, 0);
  79. if(serverfd == -1) {
  80. perror("Can't create the server socket:");
  81. return EXIT_FAILURE;
  82. }
  83. fprintf(stdout, "Server socket created with fd: %dn", serverfd);
  84.  
  85.  
  86. /* Defines the server socket properties */
  87. server.sin_family = AF_INET;
  88. server.sin_port = htons(PORT);
  89. memset(server.sin_zero, 0x0, 8);
  90.  
  91.  
  92. /* Handle the error of the port already in use */
  93. int yes = 1;
  94. if(setsockopt(serverfd, SOL_SOCKET, SO_REUSEADDR,
  95. &yes, sizeof(int)) == -1) {
  96. perror("Socket options error:");
  97. return EXIT_FAILURE;
  98. }
  99.  
  100.  
  101. /* bind the socket to a port */
  102. if(bind(serverfd, (struct sockaddr*)&server, sizeof(server)) == -1 ) {
  103. perror("Socket bind error:");
  104. return EXIT_FAILURE;
  105. }
  106.  
  107.  
  108. /* Starts to wait connections from clients */
  109. if(listen(serverfd, 1) == -1) {
  110. perror("Listen error:");
  111. return EXIT_FAILURE;
  112. }
  113. fprintf(stdout, "Listening on port %dn", PORT);
  114.  
  115. socklen_t client_len = sizeof(client);
  116. if ((clientfd=accept(serverfd,
  117. (struct sockaddr *) &client, &client_len )) == -1) {
  118. perror("Accept error:");
  119. return EXIT_FAILURE;
  120. }
  121.  
  122. /* Copies into buffer our welcome messaage */
  123. strcpy(buffer, "Hello, client!n");
  124. send(clientfd, buffer, BUFFER_LENGTH, 0);
  125.  
  126.  
  127. pthread_t t1, t2;
  128.  
  129. pthread_create(&t1, NULL, recebeMsg, NULL);
  130. pthread_create(&t2, NULL, enviaMsg, NULL);
  131.  
  132. while(1);
  133.  
  134. /* Client connection Close */
  135. close(clientfd);
  136.  
  137. /* Close the local socket */
  138. close(serverfd);
  139.  
  140. printf("Connection closednn");
  141.  
  142. return EXIT_SUCCESS;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement