0

我的应用程序是多用户回声聊天程序。如果客户端发送消息,服务器将发送给所有客户端,包括消息来源的客户端。它在 c 中实现。

服务器为每个新的客户端连接分叉一个进程。所有子进程都可以访问存储在共享内存中的所有客户端的套接字描述符

当有一个客户端时,消息会正确回显。当第二个客户端加入并发送消息时,它会正确地回显给两个客户端。

当第一个客户端发送消息时,它会正确地传输回第一个客户端。但是当尝试将该消息发送到第二个客户端时,它失败并出现错误文件描述符错误

同样,每个客户端都可以向之前连接的客户端和自身发送消息,但不能向后来连接的客户端发送消息

如何解决这个问题?

4

1 回答 1

1

访问套接字描述符并不意味着您可以访问套接字。您需要共享套接字本身,而不是它们的描述符。

此外,两个进程试图同时在同一个 TCP 连接上发送的结果是不确定的。例如,数据可能是交错的。

所以你的设计基本上是坏的。

您实际上可以共享套接字。你如何做到这一点取决于平台。您还需要使用某种形式的 IPC 来仲裁哪个进程可以写入套接字。例如,您可以为每个套接字使用一个信号量。

于 2013-04-05T21:34:28.607 回答