如何获取主机在对等网络中使用的portNumber

时间:2016-11-26 05:55:47

标签: java sockets p2p port-number

所以我正在开发一个扑克游戏,它正在为学校项目使用点对点网络架构。现在我正在研究游戏的整个多人游戏元素,我正在设计我的同行来连接一个环形格式,如下面所示 peer to peer ring format

因此,对于我的算法,当用户执行程序时,他们会给出一个端口号并创建一个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对象的端口号吗?

0 个答案:

没有答案