【问题标题】:C++ [UDP] How to keep track of all connected(clients) socket connections on server?C++ [UDP] 如何跟踪服务器上所有已连接的(客户端)套接字连接?
【发布时间】:2016-06-23 07:15:07
【问题描述】:

我的服务器应该将它收到的消息转发给所有连接的客户端,但我的代码只能将消息发送回发送者。

struct User
{
    char user_id[20];
    string address;
    struct sockaddr_in CONNECTED;
}U[8];

//USER LOGIN
    for(int i = 0; i < 8; i++)
    {
        //DO THIS WHEN USER MATCHED
        //user_id consists of Andrew, Lisa, David and etc
        //so that each unique name has a unique connection(CONNECTED)
        if(strcmp(user_id,U[i].user_id) == 0)
        {
            U[i].CONNECTED = cln_addr;
        }

    }

        //AFTER RECEIVING THE MESSAGE FROM CLIENT, SEND THE MESSAGE BACK TO ALL CONNECTED CLIENTS
        for(int i = 0; i < 8; i++)
    {
        sendto (*csock, BROADCASTMESSAGE, sizeof BROADCASTMESSAGE, 0, (struct sockaddr *)&U[i].CONNECTED, len_c_addr); //THIS HOWEVER ONLY FORWARD MESSAGE BACK TO THE SENDER
    }

【问题讨论】:

标签: c++ sockets client-server sockaddr-in


【解决方案1】:

当您接受服务器套接字中的套接字时,将其存储在数组列表中。当该客户端消失时,将其从您的数组中删除。

使用此数组,您可以向活动客户端发送和广播数据。

【讨论】:

  • 介意解释为什么我没有得到正确的结果,尽管我的做法和你的答案一样?
  • @Lozy 不,不是。你总是在同一个套接字上发送。
  • @EJP 我如何存储已连接(客户端)连接的列表,以便广播消息。在另一个具有相同目标的线程上给出的模糊答案之一是“跟踪连接”,我相信我知道这意味着什么,我只需要通过上面代码中的最后一个 for 循环来迭代连接。既然你说所有的套接字都是一样的,那么区分客户端的唯一变量是什么?
  • @EJP 他正在使用 sendto,这意味着 UDP 或其他一些无连接协议
  • @RichardHodges 他在谈论“连接的客户端”,这意味着 TCP。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
相关资源
最近更新 更多