【问题标题】:Connect to a server multiple times in java using one computer使用一台计算机在java中多次连接到服务器
【发布时间】:2020-10-19 23:49:13
【问题描述】:

我正在用 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);

    }
 }
}

【问题讨论】:

  • 如果您希望能够在您的服务器中为多个客户端提供服务,您必须在您的服务器中接受多个客户端,通常是在一个循环中。请参阅 Java 教程的自定义网络部分。 NBawt与此无关。

标签: java multithreading sockets server


【解决方案1】:

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

【讨论】:

  • @JRSofty 不需要示例。连接一次的相同代码将连接 N 次,即使使用这个错误编写的服务器也是如此。 OP 在一些误解下工作。
猜你喜欢
  • 2022-11-15
  • 2015-08-02
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多