Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // cn-lab4-server-rp.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <iostream>
- #include <string>
- #include <vector>
- #include <winsock2.h>
- #pragma comment(lib, "ws2_32.lib")
- using namespace std;
- class BookList;
- class Book {
- private:
- friend BookList;
- string isbn;
- string author;
- string title;
- string year;
- string publisher;
- string page_count;
- public:
- Book(string _isbn, string _author, string _title, string _year, string _publisher, string _page_count) {
- isbn = _isbn;
- author = _author;
- title = _title;
- year = _year;
- publisher = _publisher;
- page_count = _page_count;
- }
- auto serialize() {
- auto s = isbn + "^^^" + author + "^^^" + title + "^^^" + year + "^^^" + publisher + "^^^" + page_count + "^^^|||";
- return s;
- }
- };
- class BookList {
- private:
- vector<Book> list;
- public:
- auto add(string isbn, string author, string title, string year, string publisher, string page_count) {
- list.emplace_back(isbn, author, title, year, publisher, page_count);
- return;
- }
- auto search_by_author(string author) {
- vector<Book> matches;
- for (auto book : list)
- if (book.author == author)
- matches.push_back(book);
- return matches;
- }
- auto serialize(Book entry) {
- return entry.serialize();
- }
- auto serialize(vector<Book> entries) {
- string serialized;
- for (auto entry : entries)
- serialized += entry.serialize();
- return serialized;
- }
- } books;
- int main()
- {
- books.add("5-7940-0031-7", "Б.Страуструп", "Язык программирования C++", "1999", "Невский диалект", "991");
- books.add("5-7989-0223-4", "Б.Страуструп", "Язык программирования C++. Специальное издание", "2007", "Бином-Пресс", "1104");
- books.add("978-5-8459-1705-8", "Б.Страуструп", "Программирование: принципы и практика использования C++, исправленное издание", "2011", "Вильямс", "1248");
- books.add("5-469-01217-4", "Б.Страуструп", "Дизайн и эволюция C++", "2007", "Питер", "445");
- books.add("978-5-8459-0489-8", "Г.Шилдт", "Полный справочник по C++", "2011", "Вильямс", "800");
- books.add("978-5-8459-2000-3", "С.Мейерс", "Эффективный и современный С++: 42 рекомендации по использованию C++11 и C++14", "2016", "Вильямс", "304");
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- WSAData wsadata;
- WSAStartup(0x0202, &wsadata);
- SOCKET client_sock;
- WSAPROTOCOL_INFO protocol_info;
- //fread(&client_sock, sizeof(client_sock), 1, stdin);
- fread(&protocol_info, len, 1, stdin);
- client_sock = WSASocket(AF_INET, SOCK_STREAM, 0, &protocol_info, 0, WSA_FLAG_OVERLAPPED);
- if (client_sock == INVALID_SOCKET)
- cout << endl;
- for (int request_id = 1;; request_id++) {
- char buffer[65536];
- len = recv(client_sock, &buffer[0], sizeof(buffer) - 1, 0);
- if (len == -1 || len == 0) {
- auto err = WSAGetLastError();
- break;
- }
- buffer[len] = 0;
- string s = buffer;
- if (s == "&close")
- break;
- auto matches = books.search_by_author(s);
- if (matches.size() != 0)
- send(client_sock, books.serialize(matches).c_str(), books.serialize(matches).length(), 0);
- else
- send(client_sock, "&nomatches", sizeof("&nomatches"), 0);
- }
- closesocket(client_sock);
- WSACleanup();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment