Создание апплета игра Мультиплеер
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 к другому, если это необходимо.