Как отправить объекты с сервера на клиент при нажатии кнопки - PullRequest
0 голосов
/ 26 января 2020

Я получил 2 класса Client2 и Server2, которые отправляют данные (объект 2D Array, называемый «игровое поле»), представляющий фактическое состояние игры от GUI, друг другу. Идея заключается в том, что один игрок выступает в роли хоста (сервера), а другой - в качестве участника (присоединяется к игре в качестве клиента). Игроки делают ходы, нажимая кнопки, которые затем вызывают методы с сервера или клиента (в зависимости от того, является ли настоящий игрок сервером / клиентом) для отправки данных. Отправка объектов с клиента на сервер работает как задумано. Но я не могу понять, как это сделать наоборот, а также как проверить в качестве клиента, были ли отправлены данные с сервера в данный момент.

У классов нет сети, я создаю их в конструкторе класса "main. java".

Любая помощь будет оценена!

Client2. java

package connect4;
import javax.swing.*;
import java.net.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;

public class Client2  {




    //create the game gui
     static GridTest clientGrid = new GridTest();




public Client2() {
    System.out.println("Client is started");
    clientGrid.clientConnected = true;
}



public static  void sendToServer() throws ClassNotFoundException {

    Socket mysocket = null;


    try {
    //send data to server   
    mysocket = new Socket("localhost",9999);

    ObjectOutputStream myoutput = new ObjectOutputStream(mysocket.getOutputStream());
    myoutput.writeObject(clientGrid.gamefield);
    System.out.println("Data was sent:");

    myoutput.flush();

     /*get data from server and save it into our gamefield array
    doest work at the moment

    ObjectInputStream myinput=new ObjectInputStream(mysocket.getInputStream());
    Object mymessage = myinput.readObject();
    clientGrid.gamefield = (GridArray)mymessage;*/

    mysocket.close();


    } catch (UnknownHostException e1) {

        e1.printStackTrace();
    } catch (IOException e1) {

        System.out.println(e1.getMessage());


    }

}



}


Сервер2. java




package connect4;



import java.net.*;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Server2 {



    static Socket mysocket;
    static GridTest serverGrid = new GridTest();
    /*public static void main(String[] args) throws ClassNotFoundException, IOException {

        new Server2();

    }   */


public Server2() {

    initServer();
}

//starting server method
public void initServer() {



    try {
        ServerSocket server=new ServerSocket(9999);

        System.out.println("Server gestartet \n");
        serverGrid.serverConnected = true;      
        runit(server);


    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

//server run method
@SuppressWarnings("static-access")
public void runit(ServerSocket server) throws IOException{

    client1

    while(true) {

    mysocket = server.accept();
    try {
    ObjectInputStream myinput=new ObjectInputStream(mysocket.getInputStream());
    Object mymessage = myinput.readObject();
    serverGrid.gamefield = (GridArray)mymessage; //-<< save object into gamefield
    //System.out.println(mymessage);
    //
    serverGrid.updateGrid();



    }

 catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}






    }}



//method for sending actual game state as object to server
public static void sendToClient() throws IOException {


    ObjectOutputStream myoutput = new ObjectOutputStream(mysocket.getOutputStream());
    myoutput.writeObject(serverGrid.gamefield); 
    System.out.println("Data was sent:");
    System.out.println(myoutput);
    myoutput.flush();

}

}
...