Отчет по лабораторной работе Создание последовательного сервера с установлением логического соединения тср
Скачать 75.72 Kb.
|
Министерство образования Республики Беларусь Учреждение образования БелорусскиЙ государственный университет информатики и радиоэлектроники Факультет информационных технологий и управления Кафедра вычислительных методов и программирования ОТЧЕТ по лабораторной работе «Создание последовательного сервера с установлением логического соединения ТСР»
Минск 2021 УсловиеРазработать приложение, реализующее архитектуру «клиент-сервер». Необходимо реализовать последовательный сервер с установлением логического соединения (TCP). Логику взаимодействия клиента и сервера реализовать следующим образом: клиент посылает серверу произвольные числа и получает назад количество чисел, кратных трем. Листинг сервера#define _CRT_SECURE_NO_WARNINGS #pragma comment (lib, "ws2_32.lib") #include #include #include #include using namespace std; int main() { cout << "\tServer:\n"; WORD wVersionRequested; WSADATA wsadata; wVersionRequested = MAKEWORD(2, 2); WSAStartup(wVersionRequested, &wsadata); SOCKET s = socket(AF_INET, SOCK_STREAM, 0); cout << "Socket is created\n"; sockaddr_in local; local.sin_family = AF_INET; local.sin_port = htons(1280); local.sin_addr.s_addr = htonl(INADDR_ANY); bind(s, (sockaddr*)&local, sizeof(local)); int r = listen(s, 5); cout << "Server is waiting for request from client\n"; int n; sockaddr_in remote_addr; int size = sizeof(remote_addr); SOCKET s2 = accept(s, (sockaddr*)&remote_addr, &size); cout << "Client is connected to the server\n"; recv(s2, (char*)&n, sizeof(int), 0); cout << "Data is received\n"; int* b = new int[n]; int j = 0; for (int i = 0; i < n; i++) { recv(s2, (char*)&b[i], sizeof(int), 0); if (b[i] % 3 == 0) j++; } cout << "Data is received\n"; send(s2, (char*)&j, sizeof(j), 0); cout << "Data is sent\n"; closesocket(s2); cout << "Client is disconnected from the server\n"; WSACleanup(); cout << "Work is complited"; } Листинг клиента#define _CRT_SECURE_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #pragma comment (lib, "ws2_32.lib") #include #include #include using namespace std; int main() { cout << "\tClient:\n"; WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(2, 2); WSAStartup(wVersionRequested, &wsaData); sockaddr_in peer; peer.sin_family = AF_INET; peer.sin_port = htons(1280); peer.sin_addr.s_addr = inet_addr("127.0.0.1"); SOCKET s = socket(AF_INET, SOCK_STREAM, 0); cout << "Socket is created\n"; connect(s, (sockaddr*)&peer, sizeof(peer)); cout << "Client is connected to the server\n"; int buf[255], n = 0, res; char ans = 'n'; cout << "Enter numbers, please" << endl; for (int i = 0; ans == 'n'; i++) { cin >> buf[i]; n++; do { cout << "Next number or exit? (n/e)\n"; cin >> ans; } while (ans != 'n' && ans != 'e'); } send(s, (char*)&n, sizeof(n), 0); cout << "Data is sent\n"; for (int i = 0; i < n; i++) send(s, (char*)&buf[i], sizeof(int), 0); cout << "Data is sent\n"; if (recv(s, (char*)&res, sizeof(res), 0) != 0) cout << "Amount of numbers multiple of 3: " << res << endl; closesocket(s); cout << "Client is disconnected from the server\n"; WSACleanup(); cout << "Work is complited"; return 0; } Скриншоты |