。 我幾乎所有的,但今天我注意到,有一個主要問題。
我得到了服務器發送給我的所有數據,但如果我在顯示發送給我的數據後不做任何事情,我的while(1)
循環只會檢查一次,如果有更多數據要接收然後停止。只有當我鍵入併發送一些內容時纔會重新開始,而不是在發送我輸入的內容之後它會檢查是否有任何數據在套接字上等待並最終顯示它。
這顯然是錯誤的,因爲在這種情況下,我看到以前發送的消息,只有當我發送了一些東西。
這是我的代碼:如何實現實現IRC客戶端(靜態)的無限循環
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()
,但我不知道如何使它工作和數據池,同時仍然給我的可能性發送/接收和顯示它。
當我看到問題標題我雖然這將是一個容易回答。 – Dabbler
這是一種非常扭曲的做事方式。人們通常圍繞_single_ select呼叫進行循環。看起來你每次可以做三次,邏輯看起來非常脆弱。 – Mat
它在連鎖收發收等工作出色。所以邏輯不是很脆弱。問題是如何改變它或使用什麼函數使其能夠像接收 - 接收 - 接收 - 發送 - 接收 - 發送 - 接收 - 接收等一樣工作... – azrahel