我在发布这个问题,因为我无能为力。 我最近使用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
谢谢,萨拉特。
你怎么知道它没有输入userConnect()?是否因为你在userConnect()中放置了一个调试打印,并且你没有看到正在打印的调试打印? (如果是这样,一些可能的原因为什么:你没有清除cout;或者在到达print语句之前阻塞了执行;或者print语句在没有被采用的条件路径中;或者有多个定义userConnect(例如,由于参数重载),并且被调用的不是您将调试打印的内容;或者(可能有人)正在用#define玩游戏 –
Jeremy,我很抱歉让这个问题公开。我无法从手机中关闭它。无论如何,我编辑我的帖子。谢谢。 – user3329166