C语言 如何防止使用 UDP 数据报的进程接收自己的消息



我正在用 C 语言编写一个带有 ACK 的发送方-接收方协议.每当发送方发送数据包时,接收方都会发送相应的 ACK,然后等待下一个数据包。问题是,由于我在同一台机器上测试所有内容(使用 127.0.0.1 作为地址(,接收器将在无限循环中接收自己的 ACK。我做错了什么?

以下是接收器端的代码(全部在while循环中(:

if ((recvfrom(sockfd, buff, PACKETSZ + 1, 0, (struct sockaddr *) &sndaddr, &len)) < 0) {
    perror("recvfrom");
    return -1;
}
fprintf(stderr, "Packet received: '%s'.n", buff);
// Get sequence number (seqn) from the packet        
char answer[PACKETSZ];
snprintf(answer, PACKETSZ, "%d-ACK", seqn);
printf("Sending '%s'n", answer);
if (sendto(sockfd, answer, strlen(answer) + 1, 0, (struct sockaddr *) &sndaddr, sizeof(sndaddr)) < 0) {
    perror("sendto");
    return -1;
}

如何防止进程接收自行发送的数据报

我认为在这种情况下您无法

阻止套接字接收消息,而是需要使用地址参数来接收并忽略该消息(如果它来自您自己的套接字(。

最新更新