я кодировал игру с игровым полем, представленным в массивах. Я теперь реализовал 2 класса, называемых клиентом и сервером, у клиента есть кнопка «отправить». На сервере есть текстовое поле, в котором отправляемые данные, в моем случае объект массива, отображаются в виде строки <-both для тестирования прямо сейчас. Отправка данных работает нормально, и я хочу подключить к нему свою игру. В настоящее время это работает только в одном направлении. Клиент-> Сервер, позже я реализую двухстороннее соединение.
Моя проблема: я хочу, чтобы первый игрок подключился, действовал как хост / сервер и, следовательно, инициализировал сервер, если игра запущена Если второй человек запускает игру на своем p c впоследствии, он должен подключиться как клиент к уже запущенному серверу. Как проверить, запущен ли сервер, и, следовательно, создать экземпляр клиента для второго игрока?
Заранее спасибо!
Мой код для клиента:
package connect4;
import javax.swing.*;
import java.net.*;
import java.awt.event.*;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class ClientTest {
static protected ObjectOutputStream myoutput;
public static void main(String[] args) {
ClientTest client = new ClientTest();
//test
}
public ClientTest() {
System.out.println("Client is connected");
Window window1=new Window();
window1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
class Window extends JFrame{
public Window(){
setBounds(600,300,280,350);
WindowClient winClient=new WindowClient();
add(winClient);
setVisible(true);
}
}
class WindowClient extends JPanel{
public WindowClient(){
JLabel text=new JLabel("CLIENT");
add(text);
mybutton=new JButton("Send");
SendText textfield= new SendText();
mybutton.addActionListener(textfield);
add(mybutton);
}
private class SendText implements ActionListener{
public void actionPerformed(ActionEvent e) {
//System.out.println(campo1.getText());
try {
Socket mysocket=new Socket("localhost",9999);
System.out.println("Data was sent..");
ObjectOutputStream myoutput = new ObjectOutputStream(mysocket.getOutputStream());
myoutput.writeObject(GridTest.gamefield);
myoutput.close();
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
System.out.println(e1.getMessage());
}// meine IP und eine freie Port
}
}
//asd
private JTextField field1;
private JButton mybutton;
}}
Мой код для сервера:
package connect4;
import javax.swing.*;
import java.net.*;
import java.awt.*;
import java.io.*;
public class ServerTest {
private static char [][] spot = new char [6][7];
static boolean connected;
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerTest server = new ServerTest();
}
public ServerTest() {
WindowServer mywindow=new WindowServer();
mywindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
class WindowServer extends JFrame implements Runnable {
public WindowServer(){
setBounds(1200,300,280,350);
JPanel newpanel= new JPanel();
newpanel.setLayout(new BorderLayout());
textarea=new JTextArea();
newpanel.add(textarea,BorderLayout.CENTER);
add(newpanel);
setVisible(true);
Thread mythread = new Thread(this);
mythread.start();
}
private JTextArea textarea;
@Override
public void run() {
try {
ServerSocket server=new ServerSocket(9999);//port öfnnen listen und Verbindungen akzeptieren
while(true) {
Socket mysocket= server.accept();
ObjectInputStream myinput=new ObjectInputStream(mysocket.getInputStream());
Object mymessage = myinput.readObject();
textarea.append("\n" + mymessage);
System.out.println(mymessage);
System.out.println("Data recieved...");
mysocket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}}