使用fork in c

时间:2019-06-21 19:54:55

标签: c sockets udp multiprocessing fork

我需要使用c制作的udp服务器上的某个客户端的每个新“连接”创建一个新进程

我需要多个用户, 为此,我使用了叉子。

我的问题是服务器接收到消息并为每个消息创建一个新进程

该代码段说明,问题在于,即使recucefrom函数知道相同的消息,它也会通过recvfrom函数收到的每条新消息创建一个新进程。我需要为每个实例化的新进程(即客户端x)将消息发送到同一进程

 while (1) {
        printf("\UDP Server: waiting connection...");
        bytes = recvfrom (sock, (char *)&frame_recv, sizeof(Frame), MSG_WAITALL, (sock_addr*) &client, &size_client);

        if (bytes > 0) {
            buffer[bytes] = '\0';
            printf("\nServidor UDP: message -> %s", buffer);
            pid = fork();

            if (pid < 0) {
                perror("UDP Serve: ERRO in while forking \n");
                exit(1);
            }

            if (pid == 0) {
                sendto(
                   socket,
                   (const char *)&frame_send,
                   sizeof(Frame),
                   MSG_CONFIRM,
                   (sock_addr*)&server,
                   sizeof(server)
                );
            }
        }
    }

为此,我使用了三个握手,下面的代码片段缩小了我的发言范围。我有第一只袜子来“建立”连接,服务器以ack和客户端必须与之通信的新端口作为响应,从而创建新进程并启动该客户端功能

   while (true) {
        bytes = recvfrom (sock, (char *)&frame_recv, sizeof(Frame), MSG_WAITALL, (sock_addr*) &client, &size_client);
        if(bytes > 0) {
            pid = fork();

            if(pid == 0) {
                client();
            }
            if(pid < 0) {
                perro("bad Forking");
                exit(-2);
            }
        }
    }

在此客户端功能中,我创建了一个新的套接字并将其绑定为新端口,因此进程x仅在侦听客户端,而在该进程中我在侦听消息的过程中得到了一个新消息 无效的客户(无效){

bindSock(&new_server, new_sockt);

while (true) {
    printf("PID: %i\n", getpid());

    bytes = recvfrom(new_socket, (char *) &new_frane_recv, sizeof(Frame), MSG_WAITALL, (sock_addr *) &new_client, &new_size_client);

    if (bytes > 0) {
        iniciaCliente(&(new_frane_recv), new_sockt, new_client);
    }
}

}

我的问题是我无法让操作系统生成随机端口,当我使用getsockname时,它总是返回零。

我想知道我所做的所有事情是否也有效吗?因为我为每个客户端使用一个服务器创建了一个新进程。

这是大学的工作,与udp和fork有关

对这个大问题很抱歉,我有点迷失了'-'

0 个答案:

没有答案