В настоящее время я работаю с лазерным датчиком, который передает поток данных UDP в порт 2368. Я вижу пакеты с Wireshark.Не удается получить поток UDP из порта 2368 (Linux) C
Как я не в состоянии отправить изображение, я пишу то, что Wireshark показывает для пакета:
Источник: 192.168.17.141 Назначение: 192.168.3.255 Протокол: UDP Порт источника: HTTPS (443) Порт назначения: OpenTable (2368)
Тем не менее, я хочу прочитать пакеты с помощью следующей розетки с программой пример C:
int main(int argc, char *argv[])
{
int sock, n, res;
unsigned int length = 1206;
char* buffer = new char[1206];
sock= socket(AF_INET, SOCK_DGRAM, 0);
if (sock < 0) error("socket");
uint16_t udp_port = 2368;
sockaddr_in my_addr;
socklen_t len = sizeof(sockaddr_in);
memset(&my_addr, 0, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(udp_port);
my_addr.sin_addr.s_addr = INADDR_ANY;
cout << my_addr.sin_family << endl;
cout << my_addr.sin_port << endl;
cout << my_addr.sin_addr.s_addr << endl;
res = bind(sock, (sockaddr *)&my_addr, sizeof(sockaddr_in));
if (res == -1)
{
perror("bind");
return -1;
}
while (true)
{
n = recvfrom(sock,buffer,1,0,NULL,NULL);
if (n < 0) error("recvfrom");
}
close(sock);
return 0;
}
PROGR am успешно, пока не дойдет до recvfrom()
. Там сокет ждет пакетов и ничего не получает. Я написал ту же программу для Windows с Winsock, и она отлично работала. Поскольку я относительно новичок в ОС Linux, я не знаю, как исправить эту проблему, и был бы благодарен за советы!
Дополнительная информация: Я вручную назначен следующий IP и маску подсети для ETH4 (это интерфейс, к которому подключен прибор):
IP: 192.168.3.5 NM: 255.255.255.0
Ваша программа C++, а не C, поскольку вы используете переменную 'cout', часть iostream класса C++. –
192.168.3.255 будет широковещательным адресом с сетевой маской 255.255.255.0, вам обычно нужно включить опцию сокета SO_BROADCAST для приема этих пакетов. Но если 192.168.17.141 отправляется на ваш компьютер, он не может отправлять на широковещательный адрес вашей сети 24, поэтому здесь должны быть некоторые путаницы с сетевой маской. – nos
Вы ожидаете пакеты размером 1 октет? – wildplasser