6

私はここで何をしているのかほとんどわかりません。これまでにこのようなことをしたことはありませんが、友人と私は競合するチェスプログラムを書いているので、お互いにコミュニケーションできる必要があります。

彼は主にCで執筆し、私の大部分はPythonで執筆します。そして、いくつかのオプションを見ることができます。

  • または、一時ファイルまたは連続する一時ファイルに書き込みます。通信は決してかさばらないので、これはうまくいくかもしれませんが、私には醜い回避策のように思えます、プログラムは変更/新しいファイルをチェックし続ける必要があります、それはただ醜いようです。
  • パイプを操作する方法、つまりmine.py|を見つけてください。。/彼の 。これは少し行き止まりのようです。
  • ソケットを使用してください。しかし、私は自分が何をしているのかわからないので、誰かが私にいくつかの読み物へのポインタを教えてもらえますか?OSに依存しない、言語に依存しないメソッドがあるかどうかはわかりません。管理するために、ある種のスーパーバイザーサーバープログラムが必要でしょうか?
  • ある種のHTMLプロトコルを使用しますが、これはやり過ぎのようです。プログラムを同じマシンで実行する必要はありません。

人々は何をお勧めしますか、そしてどこから読み始めることができますか?

4

6 に答える 6

7

真にOSに依存せず、言語に依存しないプロセス間通信が必要な場合は、ソケットがおそらく最良のオプションです。

これにより、2つのプログラムが(コードを変更せずに)マシン間で通信できるようになります。

資料を読むために、ここにPythonソケットプログラミングの方法があります。

于 2010-06-08T22:40:48.733 に答える
3

2つの可能性:

  • IPソケットを使用します。Pythonドキュメントにはいくつかの例があります。(基本的な読み取り/書き込み機能を使用するだけであれば、それほど難しくはありません。)一方、Cのソケットは、一般的にそれほど簡単には使用できません。

  • 3番目のアプリケーションを作成します。サブプロセスを使用して両方のアプリケーションを起動し、パイプを介して両方のアプリケーションと通信します。チェスアプリケーションは、stdin/stdoutに対してのみ読み取り/書き込みが可能である必要があります。

    これには、このアプリケーションが移動が合法であるかどうかを確認できるという追加の利点があります。これは、バグを見つけてゲームを公平に保つのに役立ちます。

于 2010-06-08T22:43:20.443 に答える
2

プログラム間プロトコルとしてProtobufを使用し、ファイルごとに読み取り/書き込みを行うことができます。

n秒ごとに中間ファイルを読み取ることができます。

これが機能するようになったら、各プログラムがサーバーを起動して接続を待機するソケットを使用するように移動できます。

プロトコルはすでにprotobufであるため、変更は小さいはずです。したがって、変更する必要があるのは、ソケットまたはファイルから読み取る場所だけです。

いずれの場合も、交換プロトコルが必要になります。

編集

おっと、読み間違えたので、C++だと思いました。

とにかく、これがprotobufのCサポートですが、まだ作業中です

http://code.google.com/p/protobuf-c/

于 2010-06-08T22:40:15.247 に答える
0

クライアント/サーバーモデルのソケット...

基本的に、あなたとあなたの友人は、クライアントの異なる実装を作成しています。

ローカルクライアントは、ゲームの視覚的表現を表示し、ピースの状態(位置、殺された/殺されなかった)、およびピースが実行できる/実行できないこと(どの移動をどのピースで実行できるか、ボードの状態はチェック中です)。

リモートサーバーは、プレーヤーに関する状態(プレーヤーの順番、獲得したポイント、ゲームに勝ったかどうか)、および発生した移動のリストを保存します。

あなたが移動すると、クライアントはゲームのルールに照らして移動を検証し、サーバーにメッセージを送信します。このメッセージは、あなたの番です。

他のクライアントは、ターンが行われたことを確認し、サーバーから最後の移動を引き出し、移動が行われた場所を計算し、ゲームルールに対して移動を検証し、アクションをローカルで再生します。それがすべて完了すると、ユーザーは次の動きをすることができます(またはゲームが終了した場合はできません)。

クライアント/サーバーゲーム通信の最も重要な部分は、サーバーに送信するデータをできるだけ少なくし、サーバーに保存する状態をできるだけ少なくすることです。そうすれば、ローカルで、またはレイテンシーをほとんどまたはまったく発生させずに世界中で再生できます。クライアントが対戦相手のクライアントと同じルールセットで実行されている限り、すべてが機能するはずです。

クライアントのバージョンをハッキングしてだれもだまされないようにしたい場合は、位置とルールの計算をすべてサーバー上で実行し、クライアントを単純な再生メカニズムにすぎないようにすることができます。

ソケットが最適な通信媒体である理由は次のとおりです。

  • クロスプロセス通信の制限は、クロスノード通信とほぼ同じくらい困難です。
  • ネットワーキングはすべてのシステムで広くサポートされています
  • 選択した場合、これをリモートで使用するための参入障壁はほとんどまたはまったくありません。
  • ネットワーキングは堅牢で柔軟性があり、実績があります

これが、データベースのような多くの主要なシステムが、ローカル通信媒体としてだけでなく、ネットワークとしてもソケットを使用する理由の一部です。

于 2010-06-23T05:17:22.057 に答える
0

黒と白の動きを含むxmlファイルを書くだけだと思います。別のファイルに自分の順番をマークし、自分の順番のプログラムだけがそのファイルに書き込んで自分の順番をコミットするようにします。

これは、別のグループがhttp://www.xml.com/pub/a/2004/08/25/tourist.htmlで思いついたあなたの動きを保存するために提案されたxml形式へのリンクです 。

于 2010-06-08T22:43:33.960 に答える
0

両方のアプリケーションが同じコンピューターで実行されている場合は、ソケットを使用してオブジェクトをjsunにシリアル化します。それ以外の場合は、Webサービスとjsunまたはxmlを使用します。jsunとxmlパーサーは両方の言語で見つけることができます。

于 2020-02-11T14:45:51.037 に答える