Facebook
From Aqua Mosquito, 6 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 618
  1. #include "Server.h"
  2. #include <vector>
  3.  
  4. void swap(int *xp, int *yp)
  5. {
  6.         int temp = *xp;
  7.         *xp = *yp;
  8.         *yp = temp;
  9. }
  10.  
  11.  
  12.  
  13.  
  14. int server::TCP()
  15. {
  16.         /* Inicjalizacja WinSock */
  17.         WSAStartup(MAKEWORD(2, 2), &wsaData);
  18.  
  19.         /* Inicjalizacja pól - rodzina adresow, numer portu, adres IP */
  20.         my_addr.sin_family = AF_INET; //IPv4
  21.         my_addr.sin_port = htons(1111);
  22.         inet_pton(AF_INET, "127.0.0.1", &my_addr.sin_addr);
  23.  
  24.         /* tworzenie socketow - nasluchujacego oraz akceptujacego polaczenie */
  25.         ListenSocket, AcceptSocket = INVALID_SOCKET;
  26.         ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); /// SOCK_STREAM IPPROTO_TCP (TCP/IP) ||| SOCK_DGRAM IPPROTO_UDP (UDP)
  27.  
  28.                                                                                                                           /* przypisanie socketa na podany port*/
  29.         bind(ListenSocket, (sockaddr*)& my_addr, sin_size);
  30.  
  31.         /* nasluchiwanie na podanym porcie (2 mozliwe polaczenia w kolejce)*/
  32.         listen(ListenSocket, backlog);
  33.         for (;;)
  34.         {
  35.                 /* jezeli ktos sie polaczy, to przypisujemy go do AcceptSocket*/
  36.                 AcceptSocket = accept(ListenSocket, (SOCKADDR *)& their_addr, &sin_size);
  37.                 if (AcceptSocket != INVALID_SOCKET)
  38.                 {
  39.                         /* glowny program */
  40.                         std::vector<int>n;
  41.                         recv(AcceptSocket, buffer, 128, 0);
  42.                         std::string str = buffer;
  43.                         int L = std::stoi(str);
  44.                         int x;
  45.                         for (int i = 0; i < L; i++)
  46.                         {
  47.                                 recv(AcceptSocket, buffer, 128, 0);
  48.                                 std::cout << "Otrzymana liczba: " << buffer << std::endl;
  49.                                 std::string str = buffer;
  50.                                 x = std::stoi(str);
  51.                                 n.push_back(x);
  52.                         }
  53.                         for (int i = 0; i < L - 1; i++)
  54.                                 for (int j = 0; j < L - i - 1; j++)
  55.                                         if (n[j] > n[j + 1])
  56.                                                 swap(&n[j], &n[j + 1]);
  57.  
  58.  
  59.                         for (int j = 0; j < L; j++)
  60.                         {
  61.  
  62.                                 str = std::to_string(n[j]);
  63.                                 str += '\0';
  64.                                 for (int i = 0; i < str.size(); i++)
  65.                                 {
  66.                                         buffer[i] = str[i];
  67.                                 }
  68.                                 send(AcceptSocket, buffer, sizeof(buffer), 0);
  69.                         }
  70.                         std::cout << "Wszystko wyslane\nKoniec transmisji\n" << std::endl;
  71.                         closesocket(AcceptSocket);
  72.                        
  73.  
  74.                                 WSACleanup();
  75.                        
  76.                 }
  77.                
  78.  
  79.         }
  80.  
  81.  
  82.  
  83.  
  84.         return 0;
  85. }
  86.  
  87. int server::UDP()
  88. {
  89.  
  90.         /* Inicjalizacja WinSock */
  91.         WSAStartup(MAKEWORD(2, 2), &wsaData);
  92.  
  93.         /* Inicjalizacja pól - rodzina adresow, numer portu, adres IP */
  94.         my_addr.sin_family = AF_INET; //IPv4
  95.         my_addr.sin_port = htons(1111);
  96.         inet_pton(AF_INET, "127.0.0.1", &my_addr.sin_addr);
  97.  
  98.         /* tworzenie socketa oraz przypisanie go na podany port */
  99.         SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
  100.         bind(s, (sockaddr*)&my_addr, sizeof(my_addr));
  101.  
  102.         /* recvfrom - rozni sie o tyle, ze 'zapisujemy' adres na jaki mamy wyslac, nie mamy polaczenia wiec musimy jakos dane przechowywac */
  103.         recvfrom(s, buffer, 128, 0, (struct sockaddr *) &their_addr, &sin_size);
  104.  
  105.         /* glowny program */
  106.         std::vector<int>n;
  107.         std::string str = buffer;
  108.         int x, L = std::stoi(str);
  109.         for (int i = 0; i < L; i++)
  110.         {
  111.                 recvfrom(s, buffer, 128, 0, (struct sockaddr *) &their_addr, &sin_size);
  112.                 std::cout << "Otrzymana liczba: " << buffer << std::endl;
  113.                 std::string str = buffer;
  114.                 x = std::stoi(str);
  115.                 n.push_back(x);
  116.         }
  117.         for (int i = 0; i < L - 1; i++)
  118.                 for (int j = 0; j < L - i - 1; j++)
  119.                         if (n[j] > n[j + 1])
  120.                                 swap(&n[j], &n[j + 1]);
  121.         for (int j = 0; j < L; j++)
  122.         {
  123.                 for (int i = 0; i < str.size(); i++)
  124.                 {
  125.                         buffer[i] = str[i];
  126.                 }
  127.                 /* sendto - to samo co wyzej, oprocz tego ze wykorzystujemy tutaj dane, ktore wczesniej odebralismy */
  128.                 sendto(s, buffer, 128, 0, (sockaddr*)&their_addr, sin_size);
  129.         }
  130.  
  131.         closesocket(s);
  132.         WSACleanup();
  133.  
  134.         return 1;
  135. }
  136.  
  137.