Boost ASIO-同步写入 /读取 - 如何做

Boost asio - synchronous write / read - how to do?

本文关键字:读取 何做 ASIO- 同步 Boost      更新时间:2023-10-16

首先,我想说我是Boost asio的新手,我看到了很多示例,但仍然是我不了解的事情。

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

因此,我创建了一台服务器,服务器等待客户端,然后必须等待第一个客户端发送一些消息。这是我的问题:

我该怎么办?

我以为我需要阅读第一个插座,然后在第二个插座上写下,但是我怎么知道第一个客户是否写在插座上?同样,我怎么知道第二个客户是否读了第二个插座?

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

非常感谢您的阅读!

执行 async_read 时,您指定了一个回调,只要将任何数据读取到缓冲区,该回调都会被调用(您还应提供缓冲区,请检查async_read的文档)。您应该分别为 async_write 提供回调,以了解何时发送数据。因此,从服务器的角度来看,对于"写入"的客户端,您应该执行Async_read,对于第二个"读取"的客户端,您应该进行异步写入。使用提供的DataFlow Client1-> Server-> Client2,很难识别服务器应从哪个客户端读取以及写入哪个客户端。由你决定。您可以选择第一个连接的客户端作为作者,而第二个则作为读者。

您可能想从ASIO iostreams开始。这是异步插座上方的高级iostream样抽象。

P.S。:另外,别忘了在某个地方运行io_service.run()循环。因为所有的ASIO回调都是在该循环中执行的。