我需要使用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有关
对这个大问题很抱歉,我有点迷失了'-'