recvfrom не работает на стороне клиента

Я делаю одноуровневое одноранговое приложение, когда одноранговый узел должен знать, что файл с каким одноранговым узлом, он запрашивает трекер / сервер (который ведет реестр). Затем трекер отвечает адресом этого пира. В моей программе сторона трекера отправляет одноранговую информацию без ошибок, но на принимающей стороне эта информация не принимается. Я потратил впустую часы, пытаясь разобраться в этом, и я изо всех сил пытаюсь решить это. Код метода, который запрашивает трекер / сервер:

void ask(string file){

my_addr.sin_family = AF_INET;
my_addr.sin_port = MY_PORT;
my_addr.sin_addr.s_addr=inet_addr(IP.c_str());

tracker_addr.sin_family = AF_INET;
tracker_addr.sin_port = TRACKER_PORT;
tracker_addr.sin_addr.s_addr=inet_addr(IP.c_str());

char* msg = new char();
int sendSock = socket(AF_INET, SOCK_DGRAM, 0);
//send filename
cout << "Asking for file: " << file << endl;
sendto(sendSock, file.c_str(), strlen(file.c_str()), 0, (sockaddr *) &tracker_addr, sizeof(tracker_addr));
int x = bind(recvSock,(sockaddr *)& my_addr, sizeof(my_addr));if(x < 0) perror("bind");
//recieve info, 0 if no found
recvfrom(recvSock, msg, sizeof(msg), 0, (sockaddr *) &tracker_addr, (socklen_t *) &tracker_addr);
cout << "Checks" << endl;
int portToConnect = atoi(msg);

if(portToConnect != 0)
cout << "File is found with peer on port: " << portToConnect << endl;
else
cout << "No such file found" << endl;
}

посмотрите и посмотрите, сможете ли вы помочь. Спасибо в ожидании 🙂

РЕДАКТИРОВАТЬ: Так как recvfrom является блокирующим вызовом, моя программа бесконечно ждет сообщения от трекера / сервера, даже если сообщение было отправлено.

0

Решение

Задача ещё не решена.

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

Других решений пока нет …

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