Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <unistd.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- const int PORT = 1234;
- const int MAX_MESSAGE_LENGTH = 256;
- // Forward declarations
- void handleConnection(int sockfd);
- void handlePing(int sockfd);
- void handlePong(int sockfd);
- int main()
- {
- int sockfd = socket(AF_INET, SOCK_STREAM, 0);
- if (sockfd < 0)
- {
- std::cerr << "Error: Failed to create socket" << std::endl;
- return 1;
- }
- struct sockaddr_in serv_addr;
- std::memset(&serv_addr, 0, sizeof(serv_addr));
- serv_addr.sin_family = AF_INET;
- serv_addr.sin_addr.s_addr = INADDR_ANY;
- serv_addr.sin_port = htons(PORT);
- if (bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0)
- {
- std::cerr << "Error: Failed to bind socket" << std::endl;
- return 1;
- }
- if (listen(sockfd, 5) < 0)
- {
- std::cerr << "Error: Failed to listen on socket" << std::endl;
- return 1;
- }
- while (true)
- {
- struct sockaddr_in cli_addr;
- socklen_t cli_len = sizeof(cli_addr);
- int connfd = accept(sockfd, (struct sockaddr*)&cli_addr, &cli_len);
- if (connfd < 0)
- {
- std::cerr << "Error: Failed to accept connection" << std::endl;
- continue;
- }
- handleConnection(connfd);
- }
- return 0;
- }
- void handleConnection(int sockfd)
- {
- while (true)
- {
- char message[MAX_MESSAGE_LENGTH];
- int n = read(sockfd, message, MAX_MESSAGE_LENGTH - 1);
- if (n < 0)
- {
- std::cerr << "Error: Failed to read from socket" << std::endl;
- return;
- }
- if (n == 0)
- {
- std::cout << "Connection closed" << std::endl;
- return;
- }
- message[n] = '\0';
- if (std::strcmp(message, "PING") == 0)
- {
- handlePing(sockfd);
- }
- else if (std::strcmp(message, "PONG") == 0)
- {
- handlePong(sockfd);
- }
- else
- {
- std::cerr << "Error: Invalid message received" << std::endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment