【问题标题】:(Sockets) In java program pop3 commands only retrieve one message(套接字)在 java 程序中 pop3 命令只检索一条消息
【发布时间】:2014-11-26 15:16:13
【问题描述】:

我写了一个没有 javax.mail 包的 java 程序。要连接到我的 Gmail 帐户,我正在使用套接字。为了检索我的消息,我使用了 for 循环。

 for(int i=1; i<=NumOfMsg; i++){
   output.println("RETR "+i);
   do{
        answer = response();
        System.out.println(answer);
    } 
    while (true);   

响应是看起来的方法:

String response() throws IOException {

   response = input.readLine();
   if(response == null) 
   return null;
   else
   return answer;
}

执行此程序时,它只返回第一个字母。之后程序不会重复循环。光标在闪烁,我不明白他是否在等待另一个重新挂起的输入。如果我离开程序 5 分钟,它将开始永恒循环并打印 null。

任何建议都会有所帮助。

【问题讨论】:

  • 调试它?发布完整的程序?
  • IOException 或 RuntimeException 被抛出?
  • 没有任何错误或异常
  • 去掉do while循环,你已经有了for循环依赖于NumOfMsg
  • 去掉do while循环后只打印一行

标签: java sockets pop3


【解决方案1】:

你的逻辑不正确。您将答案分配给 response() 的第一个结果,然后永远不要更新它,除非响应为空。

如果您想从响应中构建答案,您应该有一个循环将响应附加到 answer 变量。

for(int i = 1; i <= NumOfMsg; ++i){
   output.println("RETR " + i);
   do {
       answer = response();
       System.out.println(answer);
   }
   while (true);
}

String response() throws IOException {
   response = input.readLine();
   return response == null ? answer : answer + response;
}

【讨论】:

  • 哇,我在回答时没有看到这是 6 个月大的.. :-s
猜你喜欢
  • 2011-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多