1

私は、学校のプロジェクトでピアツーピア ネットワーク アーキテクチャを使用するポーカー ゲームに取り組んでいます。現在、私はゲームのマルチプレイヤー要素全体に取り組んでおり、以下に示すようなリング スタイルのフォーマットを接続するようにピアを設計しています。 ピア ツー ピア リング形式

したがって、私のアルゴリズムでは、ユーザーがプログラムを実行すると、ポート番号が与えられ、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 オブジェクトに指定したポート番号を使用できますか?

4

0 に答える 0