Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Найти ошибки, которые не дают сделать асинхронный сервер - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разработать класс с набором функций для управления односвязным списком http://www.cyberforum.ru/cpp-beginners/thread693000.html
Добрый день, форумчане! Обращаюсь к вам с просьбой, с чего начать мне выполнение данного задания, какие элементы использовать. Или хотя бы небольшой пример создания такого класса. Разработать...
C++ Часы C++ Здравствуйте. Вот программа, реализующая работу часов. Подскажите пожалуйста, что нужно добавить, чтобы был выбор часового пояса. Заранее спасибо. #include <graphics.h> // заголовочный файл... http://www.cyberforum.ru/cpp-beginners/thread692994.html
перегрузка операторов C++
Есть перечисление и функция : enum Num { on, tw, th, fo ,fi, si ,se, ei, ni ,last }; Num wl(on); Num operator++(Num& obj) { obj = (obj==last) ? on : Num(obj+1); // Что значит ...
C++ Вывод в поток и операция инкремента / декремента
При использовании следующего оператора вывода в поток: int n = 10; cout << n++ << ' ' << n << ' ' << --n << endl; получил такой странный вывод: 9 10 10 Я знаю, что в принцыпе это undefined...
C++ Удаление эллементов с массива http://www.cyberforum.ru/cpp-beginners/thread692909.html
У меня к примеру есть массив 1 2 3 4 5 6 И нужно с него удалить все четные и освободить память занятую ненужными элементами. Я делаю сортировку ,и по одному откидываю все четные в конец массива...
C++ 2-х массив сортировка Привет всем. люди добрые подскажите пж по такому условию есть массив: 1 3 4 9 7 6 1 6 1 мах в этом массиве мах1=4, мах2=9, мах3=6 по строчкам как можно сделать так чтобы максимальная... подробнее

Показать сообщение отдельно
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908

Найти ошибки, которые не дают сделать асинхронный сервер - C++

09.11.2012, 14:33. Просмотров 350. Ответов 1
Метки (Все метки)

Хотелось мне сделать обертку вокруг асио. Чтобы обьект класса в одно время был сервером, в другое клиентом. Чтобы все быстро бегало, захотелось асинхронностью занятся. В итоге, как сервер он не фурычит, следовательно его клиентскую работоспособность проверить нет возможности. Помогите разобраться (в частности найти ошибки, которые не дают сделать асинхронный сервер(может ошибка во мне, может неправильно доку понял.))

Вот сам класс

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
class NetworkManager{
    std::string IP;
    unsigned short Port;
    static boost::asio::io_service io;
    boost::asio::ip::tcp::acceptor *acc;
    data(*analys)(data);
    void server_handler(const boost::system::error_code& error,boost::asio::ip::tcp::socket* s){
        if(!error){
            data A;
            std::stringstream file;
            Read(s,&file);
            boost::archive::binary_iarchive(file) >> A;
            A=analys(A);
            boost::archive::binary_oarchive(file) << A;
            Write(s,&file);
        }
    }
    void io_handler(const boost::system::error_code& error){
        ;
    }
    void connect_handler(const boost::system::error_code& error,boost::asio::ip::tcp::socket *s,data* M){
        if(!error){
            std::stringstream file;
            boost::archive::binary_oarchive(file) << (*M);
            Write(s,&file);
            while(!s->available());
                Read(s,&file);
            s->close();
            boost::archive::binary_iarchive(file) >> (*M);
            Servered();
        }
    }
    void Write(boost::asio::ip::tcp::socket *s,char *a,size_t size){
        boost::asio::async_write(*s, boost::asio::buffer(&size,sizeof(size_t)),boost::bind(&NetworkManager::io_handler,*this,boost::asio::placeholders::error));        
        boost::asio::async_write(*s, boost::asio::buffer(a,size),boost::bind(&NetworkManager::io_handler,*this,boost::asio::placeholders::error));
    }
    void Write(boost::asio::ip::tcp::socket *s,std::stringstream *file){
        file->seekg(std::ios_base::end);
        size_t size=file->tellg();
        char *a;
        file->read(a, size);
        Write(s,a,size);
    }
    void Read(boost::asio::ip::tcp::socket *s,char *a,size_t *size){
        boost::asio::async_read(*s,boost::asio::buffer(size,sizeof(size_t)),boost::bind(&NetworkManager::io_handler,*this,boost::asio::placeholders::error));
        boost::asio::async_read(*s,boost::asio::buffer(a,*size),boost::bind(&NetworkManager::io_handler,*this,boost::asio::placeholders::error));
    }
    void Read(boost::asio::ip::tcp::socket *s,std::stringstream *file){
        file->str("");
        char *a;
        size_t size;
        Read(s,a,&size);
        file->write(a,size);
    }
 
public:
    NetworkManager(){
        acc=NULL;
    }
    boost::asio::ip::tcp::socket* NewSocket(){return new boost::asio::ip::tcp::socket(io);}
    void SetIP(std::string s){IP=s;}
    void SetPort(unsigned short p){Port=p;}
 
    void Session(data *A){
        boost::asio::ip::tcp::socket* S=NewSocket();
        S->async_connect(boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(IP), Port),boost::bind(&NetworkManager::connect_handler,*this,boost::asio::placeholders::error,S,A));
    }
    void Servered(){
        if(acc!=NULL)
            acc=new boost::asio::ip::tcp::acceptor(io, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 26000));
        auto S=NewSocket();
        acc->async_accept(*S,boost::bind(&NetworkManager::server_handler,*this,boost::asio::placeholders::error,S));
    }
    void Disconnected(boost::asio::ip::tcp::socket *sock){sock->close();}
    void SetAnalyser(data(*a)(data)){analys=a;}
    static void Run(){io.run();}
};
Мейн

C++
1
2
3
4
5
6
7
data F(ata A){return data("QWERTYUI");}
int main()
{
    NetworkManager N;
    N.SetAnalyser(F);
    NetworkManager::Run();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru