Advertisement
Bewin

TCP Server

Mar 24th, 2025
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.55 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <sys/socket.h>
  4. #include <arpa/inet.h>
  5. #include <stdlib.h>
  6. #include <unistd.h>
  7.  
  8. int socket_desc, client_sock;
  9.  
  10. void close_socket(void) {
  11.     if (socket_desc >= 0) close(socket_desc);
  12.     if (client_sock >= 0) close(client_sock);
  13. }
  14.  
  15. int main(void) {
  16.     struct sockaddr_in server_addr, client_addr;
  17.     char server_message[2000], client_message[2000];
  18.    
  19.     // Register cleanup function
  20.     atexit(close_socket);
  21.  
  22.     // Initialize socket descriptors
  23.     socket_desc = -1;
  24.     client_sock = -1;
  25.    
  26.     // Clean buffers:
  27.     memset(server_message, 0, sizeof(server_message));
  28.     memset(client_message, 0, sizeof(client_message));
  29.    
  30.     // Create socket:
  31.     socket_desc = socket(AF_INET, SOCK_STREAM, 0);
  32.     if (socket_desc < 0) {
  33.         perror("Error while creating socket");
  34.         exit(EXIT_FAILURE);
  35.     }
  36.     printf("Socket created successfully\n");
  37.    
  38.     // Set port and IP:
  39.     server_addr.sin_family = AF_INET;
  40.     server_addr.sin_port = htons(2000);
  41.     server_addr.sin_addr.s_addr = INADDR_ANY;  // Accept connections on any IP
  42.    
  43.     // Bind to the set port and IP:
  44.     if (bind(socket_desc, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
  45.         perror("Couldn't bind to the port");
  46.         exit(EXIT_FAILURE);
  47.     }
  48.     printf("Binding successful\n");
  49.    
  50.     // Listen for clients:
  51.     if (listen(socket_desc, 1) < 0) {
  52.         perror("Error while listening");
  53.         exit(EXIT_FAILURE);
  54.     }
  55.     printf("Listening for incoming connections...\n");
  56.    
  57.     // Accept an incoming connection:
  58.     socklen_t client_size = sizeof(client_addr);
  59.     client_sock = accept(socket_desc, (struct sockaddr*)&client_addr, &client_size);
  60.    
  61.     if (client_sock < 0) {
  62.         perror("Can't accept");
  63.         exit(EXIT_FAILURE);
  64.     }
  65.     printf("Client connected at IP: %s and port: %i\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
  66.    
  67.     // Receive client's message:
  68.     ssize_t recv_size = recv(client_sock, client_message, sizeof(client_message) - 1, 0);
  69.     if (recv_size < 0) {
  70.         perror("Couldn't receive");
  71.         exit(EXIT_FAILURE);
  72.     }
  73.     client_message[recv_size] = '\0';  // Ensure null-termination
  74.     printf("Msg from client: %s\n", client_message);
  75.    
  76.     // Respond to client:
  77.     strcpy(server_message, "This is the server's message.");
  78.    
  79.     if (send(client_sock, server_message, strlen(server_message), 0) < 0) {
  80.         perror("Can't send");
  81.         exit(EXIT_FAILURE);
  82.     }
  83.  
  84.     return 0;
  85. }
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement