Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // cn-lab2-client.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <winsock2.h>
- #include <iostream>
- #include <string>
- #include <thread>
- #include <condition_variable>
- #pragma comment(lib, "ws2_32.lib")
- using namespace std;
- mutex m;
- condition_variable cvar;
- bool cvar_backup = false;
- int input(SOCKET sock, sockaddr_in server_addr, int server_addr_size) {
- string s;
- while (true) {
- getline(cin, s);
- if (s == "exit") {
- cvar.notify_one();
- cvar_backup = true;
- return 1;
- }
- sendto(sock, s.c_str(), s.length(), 0, (sockaddr *)&server_addr, server_addr_size);
- }
- }
- int receive(SOCKET sock, sockaddr_in server_addr, int server_addr_size) {
- while (true) {
- char recv_buff[1024];
- int len = recvfrom(sock, &recv_buff[0], sizeof(recv_buff), 0, (sockaddr *)&server_addr, &server_addr_size);
- if (len < 0)
- return 1;
- recv_buff[len] = '\0';
- string ans = recv_buff;
- if (ans == "&server_stop") {
- cout << "Server was stopped. If there are unhandled requests, they will be handled. Type \"exit\" to exit." << endl;
- return 2;
- }
- cout << ans << endl;
- }
- return 0;
- }
- int main()
- {
- WSAData wsadata;
- WSAStartup(0x0202, &wsadata);
- SOCKET sock;
- sock = socket(AF_INET, SOCK_DGRAM, 0);
- sockaddr_in server_addr;
- server_addr.sin_family = AF_INET;
- server_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
- server_addr.sin_port = htons(5002);
- int server_addr_size = sizeof(server_addr);
- string s;
- sendto(sock, "&new_client", sizeof("&new_client"), 0, (sockaddr *)&server_addr, server_addr_size);
- thread receive(receive, ref(sock), server_addr, server_addr_size);
- thread input(input, ref(sock), server_addr, server_addr_size);
- cout << "Enter sides lenghts separated with space" << endl;
- unique_lock<mutex> locked(m);
- cvar.wait(locked, [] {return cvar_backup; });
- sendto(sock, "&client_exit", sizeof("&client_exit"), 0, (sockaddr *)&server_addr, server_addr_size);
- closesocket(sock);
- if (input.joinable())
- input.join();
- if (receive.joinable())
- receive.join();
- WSACleanup();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment