2011-08-11 7 views
2

私はこのトピックに関する良い本や記事を探していましたが、それほど多くは見つかりませんでした。私は、特定のシナリオのための良い例 - コードの一部 - を見つけられませんでした。クライアント/サーバーの会話と同じです。 私のアプリケーションのプロトコルでは、メッセージを送受信する必要があります。次のようになります。 サーバーはクライアントにファイルを送信します クライアントはaccpetまたはno、 を受け入れます。サーバーは同じ接続/ソケットでバイトを送信します。 自分のアプリケーションの残りの部分メソッドを遮断するすべての使用は、サーバーは、私が何をしたかHERESにする方法リアルタイムアプリケーション(サーバ/クライアント)の設計(クラス、メソッド、インタフェース)

があります

サーバー方法:

public synchronized void sendFile(File file) 
{ 
    //send messsage asking if I can send a file 
    //block on read, waiting for client responde 
    //if client answers yes, start sending the bytes 
    //else return 
} 

クライアントの方法:私は

public void reciveCommand() 
{ 
    //read/listen for a command from socket 
    //if is a send file command handleSendFileCommand(); 
    //after the return of handleSendFileCommand() listen for another command 
} 

public void handleSendFileCommand() 
{ 
    //get the file server want to send 
    //check if it already has the file 
    //if it already has, then send a command to the socket saying it already has and return   
    //else send a command saying server can send the file 
    //create a FileInputStream, recive bytes and then return method 
} 

100%は間違っていると確信しています。サーバーとクライアントが双方向に話す方法はありません。つまり、サーバーがサーバーにコマンドを送信したいときは、その会話が終了するまでコマンドの順序を低くしておけば、それらのコマンドは別の一連のコマンドを送信/受信することができます。それで、なぜ私は要求を同期させるすべてのメソッドを作ったのですか

私は、この種のアプリケーションのデザインパターンについて勉強する必要があることを理解するのに時間がかかりませんでした... Chain of Responsibilityデザインパターンそのような状況では、どうやってそれを使うことができますか?

私は誰かがコードのようないくつかのコードを手伝ってくれることを願っています。 ありがとうございます。

答えて

1

​​Javaでは、キーワードは全く別の意味です。メソッドまたはコードブロックには、一度に1つのスレッドしか実行できないcritical sectionというマークが付けられています。あなたはここでそれを必要としません。

次に、TCP接続は、バイトストリームレベルで双方向のです。サーバーとクライアント間の同期は、交換されたメッセージによって駆動されます。 state machineと同じクライアント(サーバにも同じことが当てはまります)を考えてみましょう。メッセージの種類によっては、現在の状態で受け入れ可能なものもあれば、別の状態にノードを切り替えるものもあります。

デザインパターンを検討しているので、ここではState patternが非常に適用されます。

関連する問題