2014-03-06 39 views
0

我在发布这个问题,因为我无能为力。 我最近使用select()API编写了客户端 - 服务器交互式文件共享应用程序,作为我的家庭作业的一部分。 它在我的笔记本电脑上完美工作。但是我被告知让它在大学服务器上运行,因为那是我的项目将被测试的地方。我确定我的应用程序正在运行并提交了项目。调用'userConnect()'方法跳过

当我的应用程序开始关闭时,它调用'getMYIPAddress()'方法来获取主机的本地IP地址,我后来用它来标记自连接。现在的问题是,如果我在该方法中删除'cout < <',它将跳过'userConnect()'例程。

void getMyIPAddress (char* command, char* port) { 
    struct hostent *he; 
    struct in_addr ipv4addr; 
    char dnsIP[] = "8.8.8.8";         // Google DNS IP 
    char dnsPort[] = "53" ;          // Google DNS TCP Port 
    // Converting IP to struct in_addr type  
    inet_pton(AF_INET, dnsIP, &ipv4addr); 
    // getting host details from IP address 
    he = gethostbyaddr(&ipv4addr, sizeof ipv4addr, AF_INET); 
    cout << "BAZINGA!" << endl; 
    // Connecting to google DNS to get IP address of this process 
    userConnect (he->h_name, dnsPort, port, command); 
} 

我在提交之前删除了这个不必要的'cout'。现在它不输入userConnect(),它连接到google的DNS并且获取IP地址。如果我保留它,它工作正常。

我没有发布这个问题来浪费你宝贵的时间。如果你能理解什么可能会导致这种情况,你会缓解我的挫折感。

编辑:: @ Tanmay的回答: “我把cout < <移动到userConnect()例程,它连接之前,它没有工作。” “userConnect()中没有任何错误,它只是在它被调用时应该起作用。”

编辑:我意识到它出错了。请看后续的帖子。

Variable is being changed for some reason

谢谢,萨拉特。

+0

你怎么知道它没有输入userConnect()?是否因为你在userConnect()中放置了一个调试打印,并且你没有看到正在打印的调试打印? (如果是这样,一些可能的原因为什么:你没有清除cout;或者在到达print语句之前阻塞了执行;或者print语句在没有被采用的条件路径中;或者有多个定义userConnect(例如,由于参数重载),并且被调用的不是您将调试打印的内容;或者(可能有人)正在用#define玩游戏 –

+0

Jeremy,我很抱歉让这个问题公开。我无法从手机中关闭它。无论如何,我编辑我的帖子。谢谢。 – user3329166

回答

0

由于cout,正在解决的gethostbyaddruserConnect中可能存在bug。很可能是由于刷新了输出缓冲区。

请尝试用其他代码替换它,并尽可能共享您的实验结果。

祝你好运。

+0

'gethostbyaddr'是sys/socket.h中的方法!它不可能是越野车!此外,userConnect根本没有被调用。请参阅我的编辑。 – user3329166