使用一台计算机在 java 中多次连接到服务器



我正在用java创建一个蛇多人游戏,我想测试服务器 但我只有一台电脑,你知道我该怎么办吗?

如果你也不知道,你可以在这里看到我的主服务器代码和主客户端代码,你可以 告诉我它是否有效。

我使用Json作为服务器和客户端来交易信息 游戏从4条不同颜色的蛇开始,如果蛇吃苹果,就会变得越来越大。蛇可以吃较小的蛇

我想用一台电脑看所有 4 条蛇的动作

服务器代码:

package com.company;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
public static void main(String[] args) throws IOException, InterruptedException {
ServerSocket server = new ServerSocket(8888);
Board board = new Board();
Socket socket1 = server.accept();
Thread receiveThread1;
Thread receiveThread2;
Thread receiveThread3;
Thread receiveThread4;
Thread sendThread1;
Thread sendThread2;
Thread sendThread3;
Thread sendThread4;
Send sender1 = new Send(socket1,board);
sender1.out.writeUTF("snake1");
sender1.out.flush();
Send sender2 = new Send(server,board);
sender2.out.writeUTF("snake2");
sender2.out.flush();
Send sender3 = new Send(server,board);
sender3.out.writeUTF("snake3");
sender3.out.flush();
Send sender4 = new Send(server,board);
sender4.out.writeUTF("snake4");
sender4.out.flush();
while (true){
receiveThread1 = new Thread(new Receive(socket1,board));
receiveThread2 = new Thread(new Receive(socket2,board));
receiveThread3 = new Thread(new Receive(socket3,board));
receiveThread4 = new Thread(new Receive(socket4,board));
receiveThread1.start();
receiveThread2.start();
receiveThread3.start();
receiveThread4.start();
receiveThread1.join();
receiveThread2.join();
receiveThread3.join();
receiveThread4.join();
board.update();
sendThread1 = new Thread(new Send(socket1,board));
sendThread2 = new Thread(new Send(socket2,board));
sendThread3 = new Thread(new Send(socket3,board));
sendThread4 = new Thread(new Send(socket4,board));
sendThread1.start();
sendThread2.start();
sendThread3.start();
sendThread4.start();
sendThread1.join();
sendThread2.join();
sendThread3.join();
sendThread4.join();
}
}
}

主客户端代码:

package com.company;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.net.Socket;
import java.util.Arrays;
import java.util.Scanner;
import java.util.concurrent.locks.ReentrantLock;
import static java.lang.Thread.sleep;
public class Main {
public static void main(String[] args) throws InterruptedException, IOException {

//Game game = new Game();
ShowBoard m = new ShowBoard();
m.CreateLayout();
Socket socket = new Socket("localhost", 8888);
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
Snake snake = m.board.snake1;
String name = in.readUTF();
snake.name = name;
switch (name){
case "snake1":
snake.direction = 'r';
break;
case "snake2":
snake.direction = 'd';
break;
case "snake3":
snake.direction = 'l';
break;
case "snake4":
snake.direction = 'u';
break;
}
byte[] tile;
while (true) {
switch (snake.direction){
case 'l':
out.writeUTF("{"action":"move","direction":"left","snakeName":"" + snake.name + ""}");
out.flush();
break;
case 'r':
out.writeUTF("{"action":"move","direction":"right","snakeName":"" + snake.name + ""}");
out.flush();
break;
case 'u':
out.writeUTF("{"action":"move","direction":"up","snakeName":"" + snake.name + ""}");
out.flush();
break;
case 'd':
out.writeUTF("{"action":"move","direction":"down","snakeName":"" + snake.name +""}");
out.flush();
break;
}
tile = in.readNBytes(625);
m.sidepanel.scoreForSnake1 = in.readInt();
m.sidepanel.scoreForSnake2 = in.readInt();
m.sidepanel.scoreForSnake3 = in.readInt();
m.sidepanel.scoreForSnake4 = in.readInt();
m.board.convertTo2D(tile);
m.board.repaint();
m.sidepanel.repaint();
sleep(1000);
}
}
}

您应该能够在计算机上启动客户端四次。

最新更新