• 5058阅读
  • 1回复

TcpSocket无法接收数据,请问哪里不对? [复制链接]

上一主题 下一主题
离线ziteng
 
只看楼主 倒序阅读 楼主  发表于: 2008-05-04
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
我想写一个邮件接收程序,无奈连接后接收不到数据,请问哪里出了问题?
或者谁曾经写过类似的程序给我参考一下
 
  char buf[1024];
    socket->connectToHost(“202.113.16.11”, 110);
    if(!socket->waitForConnected())
    {
      return false;
    }
socket->read(buf, sizeof(buf));
    for(int i = -3; i <= mailTotal; i++)
    {
      QString str;
      if(i == -3)
      {
          str = "USER ";
          sendStr(str + mailinfo->getLoginName());
      }
      else if(i == -2)
      {
          str = "PASS ";
          sendStr(str + mailinfo->getPassword());
      }
      else if(i == -1)
      {
          str = "STAT";
          sendStr(str);
      }
      else if(i > 0)
      {
          str = "UIDL ";
          sendStr(str + i);
      }
          qint64 linelength = socket->read(buf, sizeof(buf));
      if(linelength == -1) {socket->disconnect(); return false;}

      if(buf[0] != '+' | buf[1] != 'O' | buf[2] != 'K')
      {
          socket->disconnect();
          return false;
      }
      if(i == -1)
      {
          getMailState(buf, mailTotal, boxsize);
          i++;
      }
      if(i > 0)
      {
          QString u = getUid(buf);
          if(namelist.indexOf(u) != -1)
          {
            socket->disconnect();
            return true;
          }
          str = "RETR ";
          sendStr(str+i);
          str = getAll();
          mailanalyze = new mailAnalyze(str);
          mailanalyze->load();
      }
      if(i == mailTotal)
      {
          socket->disconnect();
          return true;
      }

    }
    socket->disconnect();
离线ziteng
只看该作者 1楼 发表于: 2008-05-06
呵呵,我找到原因了,在读取数据之前加上              if(!socket->waitForReadyRead()) return false;
就可以了,未读到数据不是因为服务端没有返回数据,而可能是服务端的数据还没有送到我就开始读了,所以没读到。
呵呵
快速回复
限100 字节
 
上一个 下一个