Advertisement
hadarelv

Server

Jan 17th, 2022
369
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.08 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h>
  5. #include <sys/socket.h>
  6. #include <sys/types.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9.  
  10. #define PORT 5150
  11.  
  12. // Server that will continue listening on defined port even after client disconnects
  13.  
  14. int main(){
  15.  
  16.     int sockfd, ret;
  17.     struct sockaddr_in serverAddr;
  18.  
  19.     int newSocket;
  20.     struct sockaddr_in newAddr;
  21.  
  22.     socklen_t addr_size;
  23.  
  24.     int buff_size = 256;
  25.     char buffer[buff_size];
  26.     double dbuffer[1];
  27.     pid_t childpid;
  28.  
  29.     sockfd = socket(AF_INET, SOCK_STREAM, 0);
  30.     if(sockfd < 0){
  31.         printf("[-]Error in connection.\n");
  32.         exit(1);
  33.     }
  34.     printf("[+]Server Socket is created.\n");
  35.  
  36.     int enable = 1;
  37.     if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &enable,sizeof(int) ) < 0)
  38.     {
  39.         printf("[-]Could not set the socket option.\n");
  40.     }
  41.  
  42.     int priority = 128; // 100 000
  43.     if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &priority, sizeof(priority) ) < 0)
  44.     {
  45.         printf("[-]Could not set the socket priority\n");
  46.     }
  47.  
  48.     memset(&serverAddr, '\0', sizeof(serverAddr));
  49.     serverAddr.sin_family = AF_INET;
  50.     serverAddr.sin_port = htons(PORT);
  51.     serverAddr.sin_addr.s_addr = inet_addr("192.168.88.254");
  52.  
  53.     ret = bind(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
  54.     if(ret < 0){
  55.         printf("[-]Error in binding.\n");
  56.         exit(1);
  57.     }
  58.     printf("[+]Bind to port %d\n", PORT);
  59.  
  60.     if(listen(sockfd, 10) == 0)
  61.     {
  62.         printf("[+]Listening....\n");
  63.     }
  64.     else
  65.     {
  66.         printf("[-]Error in binding.\n");
  67.     }
  68.  
  69.  
  70.     while(1)
  71.     {
  72.         newSocket = accept(sockfd, (struct sockaddr*)&newAddr, &addr_size);
  73.         if(newSocket < 0)
  74.         {
  75.             exit(1);
  76.         }
  77.         printf("Connection accepted from %s:%d\n", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
  78.  
  79.         if((childpid = fork()) == 0)
  80.         {
  81.             close(sockfd);
  82.  
  83.             do
  84.             {
  85.                 recv(newSocket, dbuffer, sizeof(dbuffer), 0);
  86.                 printf("Received %f\n", dbuffer[0]);
  87.  
  88.                 dbuffer[0]=dbuffer[0]+1;
  89.  
  90.                 printf("Sending %f\n", dbuffer[0]);
  91.                 send(newSocket, dbuffer, sizeof(dbuffer), 0);
  92.             }
  93.             while ( dbuffer[0] < 2000);
  94.         }
  95.  
  96.         close(newSocket);
  97.     }
  98.  
  99.     return 0;
  100. }
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement