- #include "Server.h"
- #include <vector>
- void swap(int *xp, int *yp)
- {
- int temp = *xp;
- *xp = *yp;
- *yp = temp;
- }
- int server::TCP()
- {
- /* Inicjalizacja WinSock */
- WSAStartup(MAKEWORD(2, 2), &wsaData);
- /* Inicjalizacja pól - rodzina adresow, numer portu, adres IP */
- my_addr.sin_family = AF_INET; //IPv4
- my_addr.sin_port = htons(1111);
- inet_pton(AF_INET, "127.0.0.1", &my_addr.sin_addr);
- /* tworzenie socketow - nasluchujacego oraz akceptujacego polaczenie */
- ListenSocket, AcceptSocket = INVALID_SOCKET;
- ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); /// SOCK_STREAM IPPROTO_TCP (TCP/IP) ||| SOCK_DGRAM IPPROTO_UDP (UDP)
- /* przypisanie socketa na podany port*/
- bind(ListenSocket, (sockaddr*)& my_addr, sin_size);
- /* nasluchiwanie na podanym porcie (2 mozliwe polaczenia w kolejce)*/
- listen(ListenSocket, backlog);
- for (;;)
- {
- /* jezeli ktos sie polaczy, to przypisujemy go do AcceptSocket*/
- AcceptSocket = accept(ListenSocket, (SOCKADDR *)& their_addr, &sin_size);
- if (AcceptSocket != INVALID_SOCKET)
- {
- /* glowny program */
- std::vector<int>n;
- recv(AcceptSocket, buffer, 128, 0);
- std::string str = buffer;
- int L = std::stoi(str);
- int x;
- for (int i = 0; i < L; i++)
- {
- recv(AcceptSocket, buffer, 128, 0);
- std::cout << "Otrzymana liczba: " << buffer << std::endl;
- std::string str = buffer;
- x = std::stoi(str);
- n.push_back(x);
- }
- for (int i = 0; i < L - 1; i++)
- for (int j = 0; j < L - i - 1; j++)
- if (n[j] > n[j + 1])
- swap(&n[j], &n[j + 1]);
- for (int j = 0; j < L; j++)
- {
- str = std::to_string(n[j]);
- str += '\0';
- for (int i = 0; i < str.size(); i++)
- {
- buffer[i] = str[i];
- }
- send(AcceptSocket, buffer, sizeof(buffer), 0);
- }
- std::cout << "Wszystko wyslane\nKoniec transmisji\n" << std::endl;
- closesocket(AcceptSocket);
- WSACleanup();
- }
- }
- return 0;
- }
- int server::UDP()
- {
- /* Inicjalizacja WinSock */
- WSAStartup(MAKEWORD(2, 2), &wsaData);
- /* Inicjalizacja pól - rodzina adresow, numer portu, adres IP */
- my_addr.sin_family = AF_INET; //IPv4
- my_addr.sin_port = htons(1111);
- inet_pton(AF_INET, "127.0.0.1", &my_addr.sin_addr);
- /* tworzenie socketa oraz przypisanie go na podany port */
- SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
- bind(s, (sockaddr*)&my_addr, sizeof(my_addr));
- /* recvfrom - rozni sie o tyle, ze 'zapisujemy' adres na jaki mamy wyslac, nie mamy polaczenia wiec musimy jakos dane przechowywac */
- recvfrom(s, buffer, 128, 0, (struct sockaddr *) &their_addr, &sin_size);
- /* glowny program */
- std::vector<int>n;
- std::string str = buffer;
- int x, L = std::stoi(str);
- for (int i = 0; i < L; i++)
- {
- recvfrom(s, buffer, 128, 0, (struct sockaddr *) &their_addr, &sin_size);
- std::cout << "Otrzymana liczba: " << buffer << std::endl;
- std::string str = buffer;
- x = std::stoi(str);
- n.push_back(x);
- }
- for (int i = 0; i < L - 1; i++)
- for (int j = 0; j < L - i - 1; j++)
- if (n[j] > n[j + 1])
- swap(&n[j], &n[j + 1]);
- for (int j = 0; j < L; j++)
- {
- for (int i = 0; i < str.size(); i++)
- {
- buffer[i] = str[i];
- }
- /* sendto - to samo co wyzej, oprocz tego ze wykorzystujemy tutaj dane, ktore wczesniej odebralismy */
- sendto(s, buffer, 128, 0, (sockaddr*)&their_addr, sin_size);
- }
- closesocket(s);
- WSACleanup();
- return 1;
- }