2012-05-14 21 views
1

我正在編寫一個用C語言進行局域網聊天的程序。對於聊天應用程序,只要他發送聊天應用程序,我們就需要接收這個聊天室聊天。但問題是我使用gets()函數從一側輸入聊天內容,而當gets正在運行時,如果聊天來自另一端,它將不會被接收,直到我發送聊天到另一端。以下是我用於在服務器端發送和接收聊天的代碼。我已經刪除了我使用的所有條件,因爲它們都被證明毫無價值。請告訴我一種方法,一旦發送即可顯示來自另一端的聊天,而不管當前正在執行哪條語句。提前致謝。這是我現在的發送和接收部分的代碼:轉到另一個語句,同時獲取函數在C中運行

while(1) 
{ 
    printf("\n"); 
    gets(send_data); 
    send(connected, send_data,strlen(send_data), 0); 
    bytes_recieved = recv(connected,recv_data,1024,0); 
    recv_data[bytes_recieved] = '\0'; 
    printf("Client Says: %s " , recv_data); 
    fflush(stdout); 
} 
+4

http://en.wikipedia.org/wiki/Asynchronous_I/O – Cubic

+2

你認真使用'gets'? o_O – jamesdlin

+2

正如@jamesdlin暗示的那樣,'gets'本質上已被棄用(因爲它非常不安全並且很容易導致緩衝區溢出錯誤),所以應該使用'fgets'或類似的。更多信息:http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1049157810&id=1043284351 – huon

回答

5

而不是gets你需要使用非阻塞I/O或使用線程來實現並行計算和傾聽的同時,以莫雷韓一個客戶端時間

下面是一個introductory page非阻塞I/O

+0

我經歷了這些鏈接,但沒有得到非阻塞I/O的清晰概念。你能給我一個這樣的I/O操作的代碼,請告訴我如何在上面的代碼中實現它。謝謝。 –

+0

看來我稍微誤解了你的問題(鏈接是關於非阻塞網絡I/O的)。無論如何,以非阻塞方式讀取控制檯(用戶輸入)是依賴於平臺的(您可以檢查此[SO線程](http://stackoverflow.com/questions/448944/c-non-blocking-keyboard-input)出於某些想法)。 – Attila

+0

我是這個領域的初學者,所以我無法得到你在說什麼。你能否讓它更簡單一些? –

相關問題