【发布时间】:2020-07-18 05:03:15
【问题描述】:
我正在尝试实现客户端/服务器连接,其中服务器接受来自客户端的多个连接。现在服务器正在接受来自客户端的多个连接,但我必须同时进行多个连接并且必须保持已建立的连接处于等待状态。
我实现的方式如下:
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;
}
}
上面的问题是它只对一个连接有效,并且不会执行下一个线程,尽管 while 循环在服务器断开之前不会失败。
我必须建立两个连接,建立后必须保持两个连接处于等待状态。
帮帮我,如何实现?
【问题讨论】:
-
等待状态是什么意思?您没有对 while 循环中的连接做任何事情。异步 I/O 不应该是无限循环,它的重点是在等待某事的同时做其他事情。虽然在这种情况下,我不确定您要等待什么?
-
我想我的问题的要点是,如果它根本不涉及 con,你想用 while 循环来完成什么?那和只是返回有什么区别?
-
忘掉那个while循环吧。我要做的是我必须维护连接线程对象。当 async 被调用时,它会创建一个线程并建立连接,并且将同时创建下一个线程。一旦我建立了所有连接,现在我必须管理所有线程。明确两个线程在那里,我必须对第一个线程做一些事情。如何实现?
-
好的。所以在每个线程中,你都在建立一个连接,然后等待所有其他线程完成建立连接,这样你就可以继续了吗?我说对了吗?
-
是的,你是对的。每个线程都建立连接,建立后我必须使所有线程处于空闲状态而不是被销毁。
标签: c++ multithreading network-programming client-server