我如何使每个子进程获得不同的客户端地址(UDP套接字)

How can I make every child process get a different client address (UDP SOCKET)?

本文关键字:地址 客户端 UDP 套接字 何使每 子进程      更新时间:2023-10-16

我有一个问题:
-对于客户端发送的每条消息,服务器创建一个子进程(fork()),并且每条消息都由不同的子进程读取。
问题:
-有没有办法我可以擦除sockaddr_in结构,这样当服务器再次进入无限循环时,它会等待一个不同的客户端,每个子客户端都有一个不同的地址。

A part of the server code:
    struct sockaddr_in from;
    int main(int argc, char *argv[]) {
            int32_t stringLen;
            initSocket();
            printf("waiting for a connectionn");
            while (true) {
                int n;
                socklen_t length = sizeof(struct sockaddr_in);
                n = recvfrom(sock, &stringLen, sizeof(stringLen), 0,
                        (struct sockaddr *) &from, &length);
                if (n > 0) {
                    int pid = fork();
                    printf("fork() pid = %dn", pid);
                    if (pid < 0) {
                        error("handling request");
                    }
                    if (pid == 0) {
                        printf("Client connected...n");
                        handle_request(stringLen);
                    }
                    cout << " PID : " << pid << endl;
                }
            }
        }
Thank you ! 

正如我在评论中已经提到的:读取是由同一个套接字上的所有进程完成的,因为后者在fork() ing时是重复的。

你最好让家长阅读整个消息,然后fork()的孩子传递消息阅读,然后开始重新阅读下一个消息。

如果fork()创建了新的进程,同步操作可以简单地由文件IO执行。通过读写相同的配置文件,子进程可以从文件

中获得可用的套接字地址。