聊天

2016-08-13 120 views
-1

我想在服務器和客戶機之間創建一個聊天程序,我想在客戶端或服務器,以便能夠隨時發送短信到另一端,而不必等待例如:聊天

Client: hi 
Server: hi 
Server: I'm the server. 
Server: How are you? 
Client: Good. 

在本例中,服務器不會等待客戶端回覆並隨時發送另一條消息。

我應該使用函數select嗎?如果是這樣,我應該如何確定超時值並且超時值是否是忙等待的解決方案?

select函數是這個問題的最佳方法嗎?

謝謝。

+0

語言?平臺?錯誤?題? – EJP

回答

1

使用select似乎是正確的方法,尤其是如果您希望程序在Windows上工作。這將允許您阻止該進程並同時等待來自多個客戶端的消息。

一般而言,您應該將超時設置爲NULL,以便服務器將無限期阻止來自客戶端的請求。如果您想額外喚醒服務器,則由於其他原因,超時只會有用。

如果你使用的是Unices(比如Linux),那麼使用poll會更容易和更高效。這基本上是一樣的,但界面更容易處理。如果文件描述符數字大於1024,則使用select會變得非常尷尬,如果您希望服務器處理大量客戶端,這是一個問題。

如果您專門針對Linux並且不關心可移植性,您甚至可以使用epoll,它具有更多的性能優勢,並且可以說更易於使用。

如果您只針對Windows,則可以爲每個套接字create event objects,然後使用WaitForMultipleObjectsEx等待來自其中的任何套接字的數據。這提供了與poll類似的功能,但API非常複雜。