Основной класс не будет создавать клиента автоматически - PullRequest
0 голосов
/ 08 мая 2018

Я создаю игру главных козырей, и в ней я создаю сервер и двух клиентов. У меня есть класс контроллера, который я хочу использовать для управления игрой. Когда я запускаю контроллер, он создает мой Сервер, но мне приходится запускать клиентов отдельно для их создания.

Есть ли способ, когда при запуске контроллера он запускает как моих клиентов, так и мои серверы? Я начинающий, когда дело доходит до клиента / сервера в Java, поэтому любая помощь будет отличной.

        public static void main(String[] args) throws ClassNotFoundException, IOException {

        //Empty card arrays for now while testing
        Cards[] Player1 = new Cards[2];
        Cards[] Player2 = new Cards[2];

        Server server = new Server();

        Client client = new Client(Player1, "Gary");
        Client client2 = new Client(Player2, "Jack");
    }
}



 public class Server {


    public Server() throws IOException, ClassNotFoundException{
        @SuppressWarnings("resource")
        ServerSocket serverSocket = new ServerSocket(3000);
        System.out.println("Connecting....");

        while(!serverSocket.isClosed()) {
            Socket socket = serverSocket.accept();
            System.out.println("Connected");
            ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            //Reads my card object
            Cards card = (Cards)ois.readObject();

            JFrame frame = new JFrame();
            frame.setSize(600, 600);
            //Test
            JLabel imageLabel = new JLabel(card.image); 
            frame.add(imageLabel);
            frame.setVisible(true);
            System.out.println(card.name);
            ois.close();
            socket.close();         

        }
    }
}



 public class Client implements Serializable{   


    public Client(Cards[] hand, String string) throws IOException, ClassNotFoundException {
        Socket socket = new Socket("localhost", 3000);
        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
        //This is a test to show my card object can be passed over the stream
        Cards card = new Cards(string, 9, 5, 3, 5,new ImageIcon("C:\\Users\\gary.kelly\\Pictures\\Cards\\John Snow.jpg"));  
        oos.writeObject(card);   
        oos.close();
        socket.close();       
    }   
}

1 Ответ

0 голосов
/ 08 мая 2018

Ваша программа теперь однопоточная, метод accept сервера блокирует основной поток, поэтому клиенты не могут подключиться. Вы можете запустить сервер и клиентов в разных потоках, чтобы запускать их вместе в одном процессе Java.

    new Thread(() -> new Server()).start();
    new Thread(() -> new Client(Player1, "Gary")).start();
    new Thread(() -> new Client(Player2, "Jack")).start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...