所以我正在开发一个扑克游戏,它正在为学校项目使用点对点网络架构。现在我正在研究游戏的整个多人游戏元素,我正在设计我的同行来连接一个环形格式,如下面所示
因此,对于我的算法,当用户执行程序时,他们会给出一个端口号并创建一个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对象的端口号吗?