我正在尝试使用 C 对群聊系统的服务器端进行编程,而我的朋友正在对客户端进行编程。对于服务器接收到的每个客户端连接,它会派生一个子进程以处理客户端并继续接受任何可能的其他客户端。
服务器需要向每个当前连接的客户端发送所有在线用户(连接的客户端)的列表,因此我使用了管道。基本上,当创建子进程时,它通过套接字从客户端接收信息,并将这些信息发送给父进程,父进程通过管道保存所有客户端的列表。每次客户进行更改(例如开始聊天或断开连接)时,都必须更新此列表。例如,如果客户端断开连接,则子级通过管道向父级发送消息,并且父级对列表进行必要的操作以使其得到更新。请注意,管道是为每个新连接创建的。
我的问题是,例如,如果我一个接一个地收到 3 个连接,而第二个孩子断开连接,则父母不会从管道中读取信息,因为这样的父母与第二个孩子有不同的管道。(请记住,由于已建立第三个连接,因此已创建新管道)。我该如何解决这个问题?
我也尝试过创建一个公共管道,但如果我在读/写之前没有关闭管道,我会收到错误,如果我关闭它们,我会在第二个客户端连接时出现分段错误,因为管道将被关闭。
任何帮助将不胜感激,因为我一直在寻找几个小时无济于事。
谢谢。