如何在C ++中处理多个连接对象

问题描述 投票:0回答:1

我正在尝试实现客户端/服务器连接,其中服务器接受来自客户端的多个连接。现在服务器正在接受来自客户端的多个连接,但是我必须同时进行多个连接,并且必须将建立的连接保持在等待状态。

我实现的方式如下:

std::async ([=] { serverConnect(102, "127.0.0.1"); } );
std::async ([=] { serverConnect(102, "127.0.0.1"); } );
int serverConnect(int tcpPort, const string& hostname) {
    con = Connection_create();
    Connection_connect(con, hostname.c_str(), tcpPort);
    return con;
}

以上各行同时创建了两个客户端连接,并返回连接对象,如上所示。

现在,我必须使连接处于等待状态才能进行进一步的操作。

我尝试过以下操作,但不适用于下一个连接

int serverConnect(int tcpPort, const string& hostname) {
    con = Connection_create();
    Connection_connect(con, hostname.c_str(), tcpPort);
    while(con) {
    cout << "In waiting State" << endl;
}
}

上面的问题是,它仅适用于一个连接,尽管在服务器断开连接之前循环不会失败,但是不会执行下一个线程。

我必须建立两个连接,建立之后必须将两个连接都保持在等待状态。

帮助我,如何实施?

c++ multithreading network-programming client-server
1个回答
0
投票

为每个线程创建一个std :: promise。在每个promise上调用get_future()以获得关联的未来。将这些期货存储在所有线程都可以访问的全局向量中,例如asyncfutures。然后在每个线程中,在该线程的std :: promise上调用set_value,而不是while循环,请执行:

for (auto future : asyncfutures) {
    future.wait();
}

然后继续进行线程活动。

© www.soinside.com 2019 - 2024. All rights reserved.