私は、学校のプロジェクトでピアツーピア ネットワーク アーキテクチャを使用するポーカー ゲームに取り組んでいます。現在、私はゲームのマルチプレイヤー要素全体に取り組んでおり、以下に示すようなリング スタイルのフォーマットを接続するようにピアを設計しています。
したがって、私のアルゴリズムでは、ユーザーがプログラムを実行すると、ポート番号が与えられ、ServerSocket が作成されます。ServerSocket は新しいプレーヤーが参加するのをリッスンし、メンバー変数 nextPeer が null の場合にのみ、nextPeer をこのソケットに割り当ててリッスンを続けます。変数 nextPeer が null でない場合、クライアントは、参加しようとしているソケットの情報を取得し、nextpeer 変数が null のクライアントが見つかり、参加しようとしているピアが接続されるまで、その情報を nextPeer 変数に送信します。 null の nextPeer 変数を持つクライアントが見つかりました。新しいゲームを作成するためのコードは以下にあります。
public void createNewGame(int credits) throws IOException
{
this.player = new Player(1, credits);
this.routingTable = new ArrayList<Socket>();
(new Thread(this)).run();
String s = "";
Scanner in = new Scanner(System.in);
System.out.println("Please input a s or S to begin game");
while(!s.equals("s") || !s.equals("S"))
{
s = in.nextLine();
}
this.listening = false;
}
@Override
public void run() {
this.listening = true;
while(listening)
{
Socket newPlayer;
try {
newPlayer = connection.accept();
} catch (IOException e) {
newPlayer = null;
}
if (newPlayer != null) {
if (this.nextPeer == null) {
this.nextPeer = newPlayer;
try {
this.messaging = new MessageCenter(newPlayer);
} catch (IOException e) {
System.out.println("Error making MessageCenter");
}
} else {
String[] message = { newPlayer.getInetAddress().getHostName(),
String.valueOf(newPlayer.getPort()) };
Thread worker = new Thread(new MessagerThread("NP", message, this.messaging));
worker.run();
}
}
}
}
最後に参加したプレーヤーに、プレーヤーが名前またはホストを開始するために使用したポート番号を知らせる方法がまったくわからないため、今は行き詰まっています。上のリング アーキテクチャのイメージを見て、システム 9 はどのようにシステム 1 に接続するのでしょうか? このために ServerSocket オブジェクトに指定したポート番号を使用できますか?