Это скорее концептуальная путаница. Я делаю групповой сервер, который просто перекликается назад дейтаграммой received.Here Это кодМногоадресный эхо-сервер
while (1) {
cnt = recvfrom(sock, message, sizeof(message), 0,
(struct sockaddr *) &addr, &addrlen);
//printf("%d \n",cnt);
if (cnt < 0) {
perror("recvfrom");
exit(1);
} else if (cnt == 0) {
break;
}
printf("%s: message = \"%s\"\n", inet_ntoa(addr.sin_addr), message);
addr.sin_addr.s_addr = inet_addr(EXAMPLE_GROUP);
cnt = sendto(sock, message, sizeof(message), 0,
(struct sockaddr *) &addr, addrlen);
if (cnt < 0) {
perror("sendto");
exit(1);
}
}
Проблема с этим в качестве многоадресного сервера также будет получать датаграммы. Итак, после того, как он получает датаграмму, он отправляет, он снова получает одну и ту же датаграмму и т. Д., Введя бесконечный цикл. Любые указатели на то, как реализовать такой тип сервера?
Серверу не требуется присоединяться к группе многоадресной передачи. Делают только клиенты. – Barmar
, если вы хотите использовать многоадресную рассылку для отправки на сервер, а также для клиентов, используйте разные группы для каждого направления. – Barmar
@Barmar Мне нужно реализовать клиент и сервер в одном файле. Не могли бы вы рассказать. Спецификация выглядит так: сервер отправляет дейтаграмму каждые 15 секунд, он подсчитывает количество хостов в многоадресной рассылке (работает одна и та же программа) при получении своих ответов до 5 секунд, когда каждый процесс перехватывает полученную датаграмму. –