Guest User

Untitled

a guest
Dec 6th, 2022
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <unistd.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7.  
  8. const int PORT = 1234;
  9. const int MAX_MESSAGE_LENGTH = 256;
  10.  
  11. // Forward declarations
  12. void handleConnection(int sockfd);
  13. void handlePing(int sockfd);
  14. void handlePong(int sockfd);
  15.  
  16. int main()
  17. {
  18. int sockfd = socket(AF_INET, SOCK_STREAM, 0);
  19.  
  20. if (sockfd < 0)
  21. {
  22. std::cerr << "Error: Failed to create socket" << std::endl;
  23. return 1;
  24. }
  25.  
  26. struct sockaddr_in serv_addr;
  27. std::memset(&serv_addr, 0, sizeof(serv_addr));
  28.  
  29. serv_addr.sin_family = AF_INET;
  30. serv_addr.sin_addr.s_addr = INADDR_ANY;
  31. serv_addr.sin_port = htons(PORT);
  32.  
  33. if (bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0)
  34. {
  35. std::cerr << "Error: Failed to bind socket" << std::endl;
  36. return 1;
  37. }
  38.  
  39. if (listen(sockfd, 5) < 0)
  40. {
  41. std::cerr << "Error: Failed to listen on socket" << std::endl;
  42. return 1;
  43. }
  44.  
  45. while (true)
  46. {
  47. struct sockaddr_in cli_addr;
  48. socklen_t cli_len = sizeof(cli_addr);
  49.  
  50. int connfd = accept(sockfd, (struct sockaddr*)&cli_addr, &cli_len);
  51.  
  52. if (connfd < 0)
  53. {
  54. std::cerr << "Error: Failed to accept connection" << std::endl;
  55. continue;
  56. }
  57.  
  58. handleConnection(connfd);
  59. }
  60.  
  61. return 0;
  62. }
  63.  
  64. void handleConnection(int sockfd)
  65. {
  66. while (true)
  67. {
  68. char message[MAX_MESSAGE_LENGTH];
  69. int n = read(sockfd, message, MAX_MESSAGE_LENGTH - 1);
  70.  
  71. if (n < 0)
  72. {
  73. std::cerr << "Error: Failed to read from socket" << std::endl;
  74. return;
  75. }
  76.  
  77. if (n == 0)
  78. {
  79. std::cout << "Connection closed" << std::endl;
  80. return;
  81. }
  82.  
  83. message[n] = '\0';
  84.  
  85. if (std::strcmp(message, "PING") == 0)
  86. {
  87. handlePing(sockfd);
  88. }
  89. else if (std::strcmp(message, "PONG") == 0)
  90. {
  91. handlePong(sockfd);
  92. }
  93. else
  94. {
  95. std::cerr << "Error: Invalid message received" << std::endl;
  96. }
  97. }
  98. }
  99.  
Advertisement
Add Comment
Please, Sign In to add comment