提升asio - 同步写/读 - 怎么办?

时间:2017-09-23 16:03:50

标签: c++ sockets boost boost-asio

首先,我想说我是Boost asio的新手,我看到很多例子,但它仍然是我不理解的东西。

我想创建一个服务器,它将接受两个客户端(它将使用两个套接字)。第一个客户端将消息发送到服务器,服务器将此消息发送给另一个客户端(是的,使用服务器是没用的,但这不是重点,我想了解这一切是如何工作的)。这将发生在客户关闭之前。

所以,我创建了一个服务器,服务器等待客户端,然后,它必须等待第一个客户端发送一些消息。这是我的问题:我必须做些什么?

我以为我需要读取第一个套接字,然后在第二个套接字上写,等等,但我怎么知道第一个客户端是否在套接字上写入?同样,我怎么知道第二个客户端是否读取了第二个套接字?

我不需要代码,我只是想知道这样做的好方法。

非常感谢您的阅读!

1 个答案:

答案 0 :(得分:0)

当你执行 async_read 时,你指定一个回调,只要有任何数据被读入缓冲区就会被调用(你也应该提供缓冲区,检查async_read的文档)。您应分别为 async_write 提供回调,以了解您的数据何时已发送。因此,从服务器的角度来看,对于“写入”的客户端,您应该执行async_read,对于“读取”的第二个客户端,您应该执行异步写入。使用提供的数据流client1-> server-> client2,很难识别服务器应该从哪个客户端读取以及哪个客户端写入。由你决定。例如,您可以选择第一个连接的客户端作为编写器,第二个连接客户端作为阅读器。

您可能想要从asio iostream开始。它是异步套接字之上的高级iostream式抽象。

P.S。:同样,不要忘记在某处运行io_service.run()循环。因为所有asio回调都是在该循环中执行的。