好的,这里是情况。 我需要使用UDP构建客户端服务器。c - 具有多个客户端的UDP客户端服务器
服务器必须运行第三个程序并将其传递给客户端(我已经使用TCP和命名管道完成了这个应用程序,并且我只是将运行第三个程序的孩子的fifo或套接字的文件描述符“ )。
问题进来UDP,我不能DUP插座,因为它可以被用于多个客户端(和应用程序必须为每个客户端是唯一的),所以我有点stucked。
我在考虑在服务器和孩子之间使用命名管道 (所以客户端会发送到服务器,服务器在fifo上写,服务器在fifo上响应,服务器响应客户端,例如使用客户端ip作为fifo名称,因此可以很容易识别)。
问题是,如果我DUP儿童FIFO中,我将无法关闭并重新打开服务器上(我需要与所接收的每个消息做)先进先出...
有什么绕过这个方法?我希望保持尽可能简单。
编辑 好吧,我有点让它工作(虽然不是很漂亮)。
我做了这样的流程如下: 客户端 - >服务器 - >该客户端管道(如果它不存在,创建一个孩子,并添加该孩子的管道) - >子 - >管 - >服务器 - >客户端
管结构是这样的:
typedef struct _pipes{
char ip_client[SIZE_IP];
int fd_read;
int fd_write;
int child_pid;
struct _pipes *next;
} pipes;
当一个消息被收到(recvfrom的),I搜索管与该IP,如果没有找到,创建一个管,分叉并完成结构(并将其添加到列表中)。
服务器是否为每个客户端产生了一个子程序,或者是所有客户端只有一个子项?什么是数据流?我理解你所问的大部分内容,但细节还不是很清楚。 –
每个客户端一个孩子(孩子让dup来替换stdin和stdout,然后执行) 客户端 - >服务器 - > pipe_for_child-client - >子 - >管道 - >服务器 - >客户端 我正在尝试通过管道将每个孩子与服务器连接起来(每个孩子2个管道),为此我必须创建一个如下列表: \t typedef struct _pipes { \t \t char ip_client [SIZE_IP]; \t \t int fd_read; \t \t int fd_write; \t \t int child_pid; \t \t struct _pipes * next; \t}管; 我还没有放弃这种可能性,但我不知道它会工作,我相信它不是很漂亮 –