2016-08-20 67 views
0

我通过聊天示例应用程序学习boost :: asio。在该示例中,它向所有参与者发送消息。我想添加一个私人聊天功能(私人聊天使用服务器作为中继)。Boost :: Asio聊天示例程序---如何实现私聊

为了保持简单的问题,我们假设我们只有两个客户端A和B.到 我认为如果在连接时将A和B的套接字保存到地图中,之后,如果A想要与B交谈,我搜索A的套接字(从而找到B的套接字),然后将消息发送到B的套接字。

但是,这似乎是一个相当困难的任务。有没有办法做到这一点?

+0

这不是一件困难的事情。您必须阅读文档,并通过互联网查看示例。谷歌吐出了很多示例用法。从你刚才提到的开始,然后尝试一个聊天室。一台服务器多台客户机之后,你很熟悉boost :: asio。 – Blacktempel

回答

1

当然可以。

如果您正在寻找在C++ 11例,那么你就可以做到以下几点:

  1. 的chat_participant添加一个新的属性(一个ID)在chat_server.cpp
  2. 添加register_client功能chat_client.cpp,它向每个客户注册一个id。
  3. 变化的代码chat_room::deliver

    for (auto participant: participants_) { 
        if(participant->id == recipient_id) 
         participant->deliver(msg); 
    } 
    

以上是以下行只是给你如何做到这一点的一般概念。

希望它是有道理的。

+0

谢谢。这是有道理的。 – FlatWorld

+0

如果我不修改client.cpp怎么办?这只能在服务器端完成吗?是否可以创建一个std :: map并将两个客户端的套接字保存到地图中?我在普通套接字应用程序中使用了这种方法,因为套接字是一个整数。然而,在Boost ASIO似乎很难做到这一点,因为套接字是一个对象... – FlatWorld

+0

刚刚再次检查了代码。 std :: map存在问题。我纠正了它。它现在支持私人聊天! – FlatWorld