gpt4 book ai didi

c - UDP数据包传输

转载 作者:行者123 更新时间:2023-11-30 16:07:19 28 4
gpt4 key购买 nike

我正在使用UDP子进程,我想将父进程给出的命令的输出发送到客户端(客户端通过TCP连接到父进程)。我所做的如下所示,但它没有按我想要的方式工作。我需要将输出作为最大 512 字节的消息发送(即,如果消息是 600 字节,那么它应该发送 512 + 88 字节)。客户端收到消息后也应该退出,但在我的情况下不会退出。我尝试使用 dup2,正如我通过示例看到的那样,但它不适用于 UDP,因为没有建立连接

//child process
FILE *fp;
fp = popen(s, "r"); //s = "ls"
while (fgets(buffer, sizeof(buffer), fp)) {
sendto(sockfd, buffer, strlen(buffer)+1, MSG_CONFIRM, (const struct sockaddr *)&servaddr, sizeof(servaddr));
}

pclose(fp);
n = recvfrom(sockfd, (char *)buffer, 512, MSG_WAITALL, (struct sockaddr *)&servaddr, &len);
printf("Client : %s\n", buffer);

close(sockfd);

//client process
int len;

len = sizeof(cliaddr);

while(recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WAITALL, ( struct sockaddr *)&cliaddr, &len)){
printf("%s", buffer);
}
sendto(sockfd, (const char *)hello, strlen(hello), MSG_CONFIRM, (const struct sockaddr *) &cliaddr, len);
printf("Hello message sent.\n");

return 0;

最佳答案

客户端中的while循环永远不会退出。

默认情况下,对 recvfrom 的调用是阻塞的。这意味着它将等待直到收到数据,因此如果没有数据到来,它就会坐在那里。与 TCP 不同,没有可以关闭的连接,因此 recvfrom 不会返回 0。

您需要有某种方式让服务器告诉客户端它已完成发送数据,以便客户端知道何时响应,也许是一条字节设置为 0 的 1 字节消息。

关于c - UDP数据包传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59682729/

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