【发布时间】:2014-04-02 18:00:37
【问题描述】:
我正在设计一个客户端-服务器应用程序,我需要在它们之间使用三个不同的通道。 在架构下方,客户端打开与服务器的连接 (1),然后服务器在其他端口上打开与客户端的两个连接 (2)。
|-----------| |-----------|
| | (1) port: 8000 | |
| |<-----------------| |
| | | |
| | | |
| Server | (2) port: 8001 | Client |
| |----------------->| |
| | | |
| | (2) port: 8002 | |
| |----------------->| |
|-----------| |-----------|
一个简单的频道服务器示例:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp
我的问题是如何基于 boost.asio 框架实现这一点?或者,如何从服务器打开新连接(2)?
附:也许更好的协议可能是在建立第一个连接时从客户端打开另外两个连接?但是在这种情况下,asio 中使用的结构是什么?
提前非常感谢!
【问题讨论】:
-
如果客户端和服务器跨越 NAT,事情会变得很棘手,因为您可能无法在新端口上打开从服务器到客户端的连接。
-
非常好的评论!所以我可以忘记我的第一个想法。也许你对我有其他想法? :) 服务器返回给客户端的基于令牌的系统,可以使用它打开新的流?
-
遗憾的是我没有看 cmets。我会说同样的话,但也进行了手指练习,以提供所示图片的演示实现。还是发帖
-
理论上您也可以在单个连接上多路复用数据流。这完全取决于您想要实现的目标。
标签: c++ networking boost boost-asio