因此,我正在开发一款扑克游戏,该游戏使用对等网络架构进行学校项目。现在,我目前正在研究游戏的整个多人游戏元素,并且我正在设计我的同龄人以连接一种环形格式,如下所示
所以对于我的算法,当用户执行程序时,他们会给出一个端口号并创建一个 ServerSocket。ServerSocket 将监听新玩家的加入,然后当且仅当成员变量 nextPeer 为 null 时,我们将 nextPeer 分配给此套接字并继续监听。如果变量 nextPeer 不为 null,则客户端将获取尝试加入的套接字的信息并将该信息发送到 nextPeer 变量,直到找到具有 null 的 nextPeer 变量的客户端并且连接到连接的对等方将连接到找到一个空的 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 对象的端口号吗?