Я получил 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();
}
}