0

私は低レベルのピアツーピアアプリケーションを作成しています。ピアがどのファイルがどのピアにあるかを知る必要がある場合、トラッカー/サーバー(登録を維持している)に尋ねます。その後、トラッカーはそのピアのアドレスで応答します。私のプログラムでは、トラッカー側は問題なくピア情報を送信していますが、受信側ではその情報が受信されていません。私はこれを整理しようとして何時間も無駄にしてきましたが、これを解決しようとしても深みがありません。トラッカー/サーバーに問い合わせるメソッドのコードは次のとおりです。

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 はブロッキング呼び出しであるため、メッセージが送信されたにもかかわらず、私のプログラムはトラッカー/サーバーからのメッセージを無限に待ちます。

4

0 に答える 0