2012-02-12 22 views
2

C#の同期ソケットと非同期ソケットは非常に混同されていますが、私はLANネットワーク上でゲームプレイを開発したいのですが、私はアプリケーションのHangmanゲームにとってどちらが良いか混乱します。非同期/同期およびTCPまたはUDP

このゲームは、1プレーヤーモードまたは2プレーヤーモードで再生できます。ちょうどプレイヤーは2人のプレイヤーはターンベースでサーバーと対話serer

しかし、2プレイヤーモードと対話1つのプレイヤーモードで

。それは、プレーヤーAが間違った言葉を推測した場合、彼はターンを失い、プレーヤーBはこのターンを取ることを意味します。

私はSynchornousとAsynchronousについてお勧めしますか?

さらに、クライアントがサーバーIPを入力する必要がない場合、クライアントはサーバーを見つけることができますか?それは私がTCPとUDPの間で何を選ぶべきかを意味します

最後の質問は私がサーバを非同期ですが、クライアントは同期していますか?

は非常に

+0

2人のプレーヤーのゲームはターンベースであるため、同期呼び出しを使用することをお勧めします。 – Shai

+0

同期呼び出しがメインスレッドをブロックするため、非同期呼び出しを使用します。あなたのゲームがターンベースであるという事実は無関係です。 – twilson

+0

同期呼び出しがスレッドをブロックするだけなので、メインスレッドからソケットを使用する必要はありません。バックグラウンドスレッドからの同期呼び出しの使用はオプションです。 –

答えて

1

ありがとう同期対非同期の選択についての重要な部分は、あなたがコミュニケーションがあなたのGUIスレッドとの対話作る方法です。同期ソケットがUIをブロックしないようにしてください。私はここでは、何を期待するかを説明し、WindowsプログラミングでAsynchronousを使用する際のガイダンスを示しています。 Winsock tips

TCP/UDPに関する2番目の質問には、2つの間に違いがあることに注意してください。まず第一に、TCPは接続が有効である間にパケット配信を保証することになります。あなたの状況と単純な要件とパフォーマンスのニーズの欠如を考えてください。 TCPがおそらくあなたの最良の選択です。ドロップされたパケットを許可してレイテンシを改善しなければならない高性能ゲームを設計している場合、UDPはより良い選択肢になりますが、パケットを破棄してOut of Orderパケットがあるとどうなるかを考慮する必要があります。 TCPはあなたの複雑さをすべて隠し、より簡単に作業します。

同期と非同期のクライアント/サーバーを混在させると問題は発生しません。彼らは、通信リンク自体(TCP/UDP)についてのみ知っています。

あなたが私にSynchornousと非同期についての示唆を与えることができます:あなたのケースではtwilsonは、あなたのメインの同期ソケットブロックを述べたようにあなたは、同期または非同期のどちらかのソケットを使用することができるアプリケーションの複雑さを与えられたので、ご質問について

1

非同期のスレッドではパフォーマンスの問題が発生する場合は非同期のソケットを使用します

さらに、クライアントがサーバーIPを入力する必要がない場合、クライアントはどのようにサーバーを見つけることができますか? TCPとUDPのどちらを選ぶべきかを意味します.TCPとUDPの接続にはかなりの違いがあります。通常、Voipアプリ、リアルタイムゲーム、ビデオチャットなどのような問題がある場合は、UDP(コネクションレス)を使用します。他のケースではTCPを使用しているので、あなたのケースではTCPが良いものになるはずです。

最後の質問は私がサーバーを作成することができます非同期ですが、クライアントは同期ですか、それは大丈夫ですか? はい、クライアントとサーバーの両方で同じタイプのソケットを使用することをお勧めしますが、この種の実装を使用できます。