подключение к сокету recvfrom нет ответа переполнение стека

Я пытаюсь получить данные из UDP-трансляции, но нет ответа от recvfrom функция. Связь, привязка, все выглядит хорошо.

Может ли быть проблема с трансляцией?

Могу ли я проверить точную ошибку?

#include <iostream>
using namespace std;
//#include <ServerSocket.h>
#include <cstring>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{

enter code here
int status;
int socketfd;
int enableMulticast = 1;         // Argument for set socket

struct addrinfo host_info;       // The struct that getaddrinfo() fills up with data.
struct addrinfo *host_info_list; // Pointer to the to the linked list of host_info's.
struct sockaddr_in socketAddr;
unsigned char incomming_data_buffer[IN_LEN];
socklen_t socklen;
#ifndef IN_LEN
#define IN_LEN 4096
#endif

memset(&host_info, 0, sizeof host_info);
memset(&socketAddr, 0, sizeof(struct sockaddr_in));

cout << "Setting up the structs..."  << endl;

host_info.ai_family = AF_UNSPEC;     // IP version not specified. Can be both.
host_info.ai_socktype = SOCK_DGRAM; // Use SOCK_STREAM for TCP or SOCK_DGRAM for UDP.
host_info.ai_protocol = IPPROTO_UDP; // The protocol type for UDP. If left as zero, it will return all typesstatus = getaddrinfo("UDP IP Address","Port", &host_info, &host_info_list);

socketfd = socket(host_info_list->ai_family, host_info_list->ai_socktype,
host_info_list->ai_protocol);
if (socketfd == -1)  cout << "socket error " ;
else cout << "socket created successfully " ;

status = setsockopt(socketfd, SOL_SOCKET, SO_REUSEADDR, &enableMulticast, sizeof(enableMulticast));

socketAddr.sin_family = AF_INET;
socketAddr.sin_port = htons(INT_PORT);
socketAddr.sin_addr.s_addr = htonl(INADDR_ANY);

status = bind(socketfd, (struct sockaddr *)&socketAddr, sizeof(struct sockaddr_in));

status = connect(socketfd, host_info_list->ai_addr, host_info_list->ai_addrlen);
if (status < 0)  cout << "connect error" <<endl ;

cout << "Waiting to receive data..."  << endl;
socklen = sizeof(struct socketAddr);

while(1){
status = recvfrom(socketfd, incomming_data_buffer, IN_LEN, 0, (struct sockaddr *)&socketAddr, &socklen);

if(status >= 0) {
cout << "data received" ;
freeaddrinfo(host_info_list);
close(socketfd);

exit(0);
}
}
}

-2

Решение

if(status = 0)

Это никогда не может быть правдой. (1) это опечатка для status == 0; (2) это должно быть status >= 0т.е.status длина полученной дейтаграммы

1

Другие решения


По вопросам рекламы [email protected]