2012-02-18 114 views
0

我正在研究在c中創建一個tcp客戶端。 但是在我開始之前,我想向您提供一些建議。c發送和偵聽的tcp客戶端:概念

客戶端用於控制燈光和其他設備。

有了這個客戶端,我需要發送命令,但是我也可以在某人關閉燈光時接收事件。

只需用套接字發送命令就沒有問題。 但同時我必須閱讀收到的包。

這最好的解決方法是什麼? 我是否需要使用線程,還是可以用libevent之類的東西解決這個問題?

大多數人如何實現這樣的東西?

這個庫應該儘可能的便攜。 (Linux操作系統,UNIX,Windows和...)

(我不是在尋找的代碼,而只是一個最好的方法)

回答

1

BSD套接字是雙向的,你可以檢查你的插座有傳入數據或不被選擇(2)

IMHO使用的libevent是太多你的目的。這很好,但你還有很長的路要去實現它的力量。其實libevent是選擇(2)或其改進的繼任epoll(2)等的包裝

+0

我可以在選擇期間發送命令嗎?我的用戶必須能夠隨時控制燈光。 (使用GUI或Web界面或其他)我必須同時等待用戶輸入和輸入數據。 – r03 2012-02-18 09:23:35

+0

select(2)取超時參數。如果你不是爲遊戲行業工作,超時100毫秒就足夠了。 (即用戶需要等待最多100毫秒的時間來處理他的輸入。) – nodakai 2012-02-18 10:31:31

+0

謝謝,我想我會嘗試先選擇(2),如果它工作正常,我會嘗試使用libuv – r03 2012-02-18 12:13:04

0

我認爲你必須有兩個連接,一個用於發送命令,一個用於獲取來自服務器的響應,當有人關燈時,大多數時候兩個conns是睡覺。如果只創建一個連接,則必須每xx毫秒查詢燈光狀態,大部分時間浪費帶寬。如果你的應用程序不嚴重,服務器可以使用UDP通知客戶端什麼時候關燈,哪個解決方案只需要一個實時TCP連接。

+0

我只是發送一個tcp命令,我希望在每次燈光變化時都收到更新。服務器比爲每個更改發送一個包。我只能從同一臺電腦上建立一個連接。 (我沒有寫服務器) – r03 2012-02-18 09:39:41