Я пытаюсь транслировать UDP по сети.
Некоторые подробности о моей сети.
Трансляция будет происходить с 172.24.176.219
Я буду слушать трансляцию на 172.24.176.116
Маска подсети 255.255.255.0
Код вещания указан ниже:
#define _GNU_SOURCE
#include <arpa/inet.h>
#include <linux/if.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#define PORT 10001
#define MAXBUF 65536
int main(void) {
int sock, status, buflen, sinlen;
char buffer[MAXBUF];
struct sockaddr_in sock_in;
int yes = 1;
sinlen = sizeof(struct sockaddr_in);
memset(&sock_in, 0, sinlen);
buflen = MAXBUF;
sock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
sock_in.sin_addr.s_addr = htonl(INADDR_ANY);
sock_in.sin_port = htons(PORT);
sock_in.sin_family = AF_INET;
status = bind(sock, (struct sockaddr *)&sock_in, sinlen);
printf("Bind Status = %d\n", status);
status = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &yes, sizeof(int) );
printf("Setsockopt Status = %d\n", status);
inet_aton("172.24.176.255", &sock_in.sin_addr);
sock_in.sin_port = htons(PORT + 1); // port number
sock_in.sin_family = AF_INET;
sprintf(buffer, "Ciao");
while(1)
{
buflen = strlen(buffer);
status = sendto(sock, buffer, buflen, 0, (struct sockaddr *)&sock_in, sinlen);
printf("sendto Status = %d\n", status);
sleep(1);
}
shutdown(sock, 2);
close(sock);
}
Вот Makefile
для компиляции источника C
.Имя C
источник myserver.c
CFLAGS+=-Wall -Wextra -Werror -pedantic -std=c99
TARGET=myserver
.PHONY: all
all: $(TARGET)
.PHONY: clean
clean:
rm -f $(TARGET)
Команда netcat, которую я запускаю для прослушивания UDP:
nc -ul 172.24.176.116 10002
Проблема в том, что я нене вижу ничего, отображаемого Netcat.Я прослушал трафик с помощью Wireshark и вижу, что пакет отправляется на 172.24.176.255
Вот снимок экрана:
Я попытался прослушать 172.24.176.255, nc -lu 172.24.176.255 10002
, но получил следующий вывод nc: Can't assign requested address
.
Я что-то упустил или netcat просто не может обработать UDP-трансляцию?