#include "Server.h" #include 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::vectorn; 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::vectorn; 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; }