Создание апплета игра Мультиплеер

            This is a intro to my problem Skip if you don't care.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

У меня есть Java-апплет, и я новичок в Java. первый семестр введения CSIS10a в Java. У меня и моих друзей был проект по созданию Java-апплета для нашего финала. Мы закончили с "А", и, на мой взгляд, он был лучшим там. Подумайте астероиды, но боковой скроллер, как R-Type своего рода. Мой друг по математике сделал всю физику, кое-что довольно крутое, что я хотел сказать, мой другой друг был арт-парнем, а FX рисовал корабль и делал взрывы и тому подобное, тоже довольно круто. Я "обезьяна кода", я думаю, потому что у меня большой опыт работы в сети, и я системный администратор для серверов Linux. Так что я знаю bash, как тыльную часть моей руки, ява пришла ко мне довольно легко (намного проще, чем мой сверстник, я бы сказал). поэтому после финала они сказали: "Эй, мы должны выложить это онлайн и сделать его многопользовательским!", и, конечно, я сказал: "Конечно, это должно быть достаточно просто! Настройте сервер Java и попросите их отправлять координаты X & Y туда и обратно.. сделать геттер и сеттер для X & Y и были в бизнесе! " и конечно я был не прав лол.

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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                                End of intro

Я преобразовал простую систему клиент / сервер чата (на основе примеров эхо-сервера) для отправки целых вместо строк на сервер, а сервер отправляет целые значения второму клиенту. пока клиент по-прежнему является приложением, а не частью апплета, и мы тестировали его, вызывая метод client в игре, которую мы запускаем отдельно. Я не могу понять, как запустить клиент при запуске игры, потому что каждый раз, когда я пытаюсь создать метод, который создает сокет, игра зависает и не подключается. Я думаю, потому что сокет похож на бесконечный цикл, который никогда не продолжается с остальной частью кода. так что я посмотрел на темы, я создаю новую тему, которая устанавливает соединение, и игра является отдельной, но угадайте, что? игра зависает и подключается или играет и не подключается LOL.

Любая помощь была бы отличной, я понятия не имею, что делать, и у меня нет идей и идей, если вы хотите, чтобы я опубликовал весь мой код, потому что это довольно долго, но я плохо публикую свой класс клиента, если хотите...

package Connection;
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import java.util.Timer;
import java.io.*;
import java.net.*;

class client extends JFrame implements ActionListener {

static String address = "127.0.0.1";
static JLabel text, clicked;
static JButton button;
static JPanel panel;
static JTextField textField;
static JTextArea textArea;
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;

client() {
    text = new JLabel("Send Text Over Socket:");
    textField = new JTextField(20);
    textArea = new JTextArea(5, 20);
    button = new JButton("Send");
    button.addActionListener(this);

    panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.setBackground(Color.white);
    getContentPane().add(panel);
    panel.add("Center", textField);
    panel.add("North", textArea);
    panel.add("South", button);
}

public void actionPerformed(ActionEvent event) {
    Object source = event.getSource();

    if (source == button) {
        String text = textField.getText();
        out.println(text);
        textField.setText(new String(""));
        try {
            String line = in.readLine();
            if (line != null)
                client.textArea.append("Text received :" + line + "\n");
            else
                client.textArea.append("Welcome To James World Messager!");
        } catch (IOException e) {
            client.textArea.append("Read failed\n");
            System.exit(1);
        }
    }
}

public void listenSocket() {
    try {
        socket = new Socket(address, 4444);
        out = new PrintWriter(socket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(
                socket.getInputStream()));
    } catch (UnknownHostException e) {
        client.textArea.append("Unknown host: " + address + "\n");
        System.exit(1);
    } catch (IOException e) {
        client.textArea.append("No I/O\n");
        System.exit(1);
    }
}

public static void main(String[] args) throws IOException {
    client frame = new client();
    frame.setTitle("Client Program");

    WindowListener l = new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    };

    frame.addWindowListener(l);
    frame.pack();
    frame.setVisible(true);
    frame.listenSocket();
}

}

Это код, который я пытался внедрить в игру как класс, который я мог бы вызвать, но без игры в кости...

package Game;
import java.io.*;
import java.net.*;

public class tclient extends Thread{
 String address = "***.***.***.***;
 Socket socket = null;
 PrintWriter out = null;
 BufferedReader in = null;
 tclient tclient[];

 public tclient(Socket socket, tclient[] tclient) {
    this.socket = socket;
    this.tclient = tclient;
    }
 public void run(){
 try{
   socket = new Socket(address, 1234);
   out = new PrintWriter(socket.getOutputStream(), true);
   in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 } catch (UnknownHostException e) {
   System.out.println(e);
 } catch  (IOException e) {
   System.out.println(e); 
 }
 }
 //    public void sendX(int x){
 //        out.println(x);
 //     }
 //    public void sendY(int Y){
 //        out.println(Y);
 //     }
 }

1 ответ

Я думаю, что одной из проблем, с которыми вы можете столкнуться (или скоро столкнетесь), является то, что Java-апплетам не разрешается устанавливать TCP-соединения с любым сервером, кроме сервера, на котором размещен апплет. Таким образом, если вы не запускаете веб-сервер на локальном хосте и также указываете свой веб-браузер на локальный хост, TCP-соединение с 127.0.0.1 из апплета вызовет исключение и не будет работать.

Предположительно для того, чтобы мультиплеер работал на Java-апплете, вам понадобится отдельный серверный процесс, работающий на той же машине, что и веб-сервер. Различные апплеты Java могут затем подключиться к этому процессу сервера (поскольку им разрешено подключаться к IP-адресу веб-сервера), и процесс сервера будет отвечать за пересылку информации от одного апплета Java к другому, если это необходимо.

Другие вопросы по тегам