实施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()
,但我不知道如何让它工作和数据池,同时仍然给我发送/接收和显示它的可能性。
答案 0 :(得分:0)
在while(1)循环中,您可以定期“戳”服务器以获取新内容。响应将更新套接字的内容。这将触发在套接字缓冲区上有recv()数据......