0

实现 IRC 客户端(仍然)。我几乎拥有一切,但今天我注意到,有一个主要问题。
我得到了服务器发送给我的所有数据,但如果我什么都不做,只是在显示发送给我的数据后等待,我的while(1)循环只检查一次是否有更多数据要接收然后停止。仅当我键入并发送某些内容时才重新开始,而不是在发送我键入的内容后检查是否有任何数据在套接字上等待并最终显示它。
这显然是错误的,因为在这种情况下,我看到之前收到的消息,只有当我发送一些东西时。
这是我的代码:

while(1){    
  if((readReady = readReadiness(sockfd))==0){    //nothing to recv
          if(((writeReady = writeReadiness(sockfd))>0) && (readReady = readReadiness(sockfd))==0){  //sending is possible  
                (data sending part...)  
          }
          else
                continue; //if there s no data to read and cant send
          }
  else{         //if there s some data to recv() on the socket buffer 
          (parsing and receiving data part...)  
   } 
    continue;
}

readReadiness()writeReadiness()用于select()检查是否有任何数据要接收或可能发送一些。

问题是:如何制作无限循环,即使我什么都不做,也会重复检查是否有任何数据要接收。? (while(1)在我再次发送之前停止检查)
我尝试使用fork(),但我不知道如何让它工作并汇集数据,同时仍然让我有可能发送/接收和显示它。

4

1 回答 1

0

在您的 while(1) 循环中,您可以定期“戳”服务器以获取新内容。响应将更新您的套接字的内容。这将触发套接字缓冲区上有数据要接收到 recv() ......

于 2012-05-18T15:52:35.243 回答