2012-01-03 17 views
0

データに接続してルーティングする共通サーバーを使用しない単純なチャットアプリケーションを作成したかったのです。しかし、チャットプログラムでは奇妙なことに、ターンを取らずにやる方法は分かりません。recv()とsend()winsockの両方を実行する

私はマルチスレッドを行うことができると考えましたが、私が今までに見つけた情報は、クライアントの要求(クライアントのキューのことを巡って)に関わるスレッディングです。私は絶対にマルチスレッドを試していませんでした。私はそれが唯一の方法かどうかもわかりません。私は何かイベントを動かすこともしましたが、VSで動作するようにncursesを作ることはできませんでした(リンクされコンパイルは成功しましたが、ライブラリ自体に問題があります)。

基本的にどのように私はチャットプログラムを作成し、ではなく、が交代します。結局のところ、recv()の呼び出しは何かを受け取るまで保持しています。その間、私はstdin関数を呼び出すことはできません。

答えて

2

イベントループを使用します。

1)何か問題はありましたか?

2)そうなら、それを処理します。

3)そうでない場合は、何かが起きるのを待ってください。

4)今1

に進み、あなただけ(たとえば、ソケット上で受信されたデータとして起こることができるすべてをしなければならない)あなたがソケットの場合は、ステップ3で待つことができたイベント、あなたはWSAEventSelectでそれを行います。 WaitForMultipleEventsでイベントを待つことができます。

また、WSAAsyncSelectのソケットでデータを受信するたびに、WindowsのメッセージをWinsockに送信させることもできます。

0

recvを呼び出す前に、データが利用可能かどうかを確認してください。あなたはそれを使うためにselectやpollを使うことができます。 選択参照を参照してください。おそらくwinsock FAQです。

関連する問題