recvfrom不在客户端工作

时间:2015-11-19 19:23:26

标签: c++ sockets 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 个答案:

没有答案