gpt4 book ai didi

c - 基于 fork 的服务器是否可以进行客户端-客户端通信?

转载 作者:太空宇宙 更新时间:2023-11-04 02:28:13 25 4
gpt4 key购买 nike

我正在实现一个允许客户端聊天的非常基本的 C 服务器。现在我正在使用 fork(),但我无法让客户看到彼此的消息。

似乎所有客户端都从 accept() 获得相同的文件描述符。基本上,我有一个 while 循环,用于测试是否有人想连接 select()、accept() 他们的连接和 fork()。之后,我读取输入并尝试将它们传递给所有用户(我将其保留在列表中)。如有必要,我可以复制/粘贴我的代码。

那么,是否可以让客户端与进程通信,还是必须使用 pthreads?

最佳答案

Inter-process communication -IPC-(通常)不关心客户端与服务器(connect 阶段除外)。给定的进程可以同时具有客户端和服务器角色(在不同的套接字上),并且会使用 poll(2)或某些 event loop 中多个套接字上的较旧的 select .

注意 processes各有各的virtual address space , 而 threads共享相同 虚拟地址空间(包含它们的进程之一)。阅读一些 pthread tutorial , 和一些关于 POSIX 编程的书(可能是旧的 ALP )。请注意,可以通过 /proc/ 在 Linux 上查询有关进程的大量信息(更多信息请参见 proc(5))。特别地,pid 1234 进程的虚拟地址空间可以通过 /proc/1234/maps 获得,其打开的文件描述符可以通过 /proc/1234/fd//proc/1234/fdinfo/ 等....

但是,编写一个通用服务器来保持共享状态并向客户端发送消息会更简单。

您可以设计一个协议(protocol),让客户端可以通过某种方式启动该 IPC。例如,如果所有进程都在同一台机器上,您可以使用一个协议(protocol)来传输用作 unix(7) 的文件路径。套接字地址,或 fifo(7) ,并且每个“客户端”进程随后启动(通过一些connect)与另一个“客户端”的直接通信。这样做可能是不明智的。

还可以查看像 0mq 这样的库.他们通常是 free software ,这样您就可以研究他们的源代码。

关于c - 基于 fork 的服务器是否可以进行客户端-客户端通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47747350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com