2012-02-18 6 views
0

私はCでTCPクライアントを作っています。 しかし、私が始める前に、あなたからアドバイスをしたいと思います。クライアントが送信して聞いているtcpクライアント:コンセプト

クライアントはライトと他のデバイスを制御するためのものです。

このクライアントでは、コマンドを送信する必要がありますが、誰かによってライトがオフになったときにイベントを受け取ることもできます。

ソケットでコマンドを送信するだけで問題はありません。 しかし、同時に私は入ってくるパッケージを読む必要があります。

これはどのように最善の解決方法ですか? スレッドを使用する必要がありますか?これはlibeventのようなもので解決できますか?

ほとんどの人はどのようにこのようなものを実装しますか?

このライブラリは可能な限りポータブルである必要があります。 (Linuxでは、UNIX、窓、...)

(私はコードを探していますが、いないよただ最善のアプローチ)

答えて

1

BSDソケットは双方向である、とあなたのソケットが入ってくるデータを持っているかどうかをチェックすることができますかを選択(2)

私見使用libeventがために多すぎますあなたの目的。それは素晴らしいですが、あなたはその力を実現するためには長い道のりがあります。実際にはlibeventはselect(2)やその後継epoll(2)のラッパーです。

+0

選択中もコマンドを送信できますか?私は常に光を制御できる必要があります。 (GUIやWebインターフェースなどを使って)私はユーザー入力と着信データを同時に待たなければなりません。 – r03

+0

select(2)はタイムアウトのパラメータをとります。ゲーム業界で働いていない場合は、100 msのタイムアウトで十分です。 (つまり、ユーザーは入力を処理するために最大100ミリ秒を待つ必要があります) – nodakai

+0

ありがとうございます。私はselect(2)を最初に試してみるといいでしょうし、うまくいけばlibuv – r03

0

2つの接続が必要です。コマンドを送信するためのものと、サーバーからの応答を取得するものと、ほとんどの時間は2つのconnsは睡眠です。接続を1つしか作成しない場合は、xx msごとにライトステータスを照会する必要があります。ほとんどの場合、帯域幅が浪費されます。あなたのアプリが深刻ではない場合、サーバーはUDPを使用して、誰かによって電源がオフになったときにクライアントに通知します。このソリューションでは、1つのライブTCP接続のみが必要です。

+0

で改善しようとします私はライトが変わるたびにアップデートを受けたいと思うtcpコマンドを送るだけです。サーバーは、変更ごとにパッケージを送信します。私は同じPCから1つの接続しかできません。 (私はサーバーを書いていない) – r03

関連する問題