This is a intro to my problem Skip if you don't care.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我有一个java applet,我是java的新手。第一学期的CSIS10a介绍java。我和我的朋友有一个项目为我们的决赛制作一个java applet游戏。我们用“A”结束了,在我看来那是最好的。想想小行星,但像R-Type那样的侧卷轴。我的狡猾的朋友做了所有的物理,我说了一些非常酷的东西,我的另一个朋友是艺术家,FX吸引了船,做了爆炸和东西,也非常棒。我猜是“代码猴子”,因为我有很多网络背景,而且我是Linux服务器的系统管理员。所以我知道bash就像我的手背,java很容易对我来说(比我的同行要容易得多)。所以在决赛结束后他们说“嘿,我们应该把它放在网上并让它成为多人游戏!”,当然我说,“当然应该足够简单!设置一个java服务器并让他们发回X& Y坐标和为X& Y制作吸气剂和制定者并开展业务!“当然我错了大声笑。
所以...经过一个月的努力解决,每周在这里发布一些小问题后,我决定在这里发布整个问题,看看能不能得到一些指导。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
End of intro
我已经转换了一个简单的聊天客户端/服务器系统(基于echo服务器示例),将int而不是字符串发送到服务器,服务器将int发送给第二个客户端。到目前为止,客户端仍然是一个应用程序,而不是applet的一部分,我们一直在通过调用我们单独运行的游戏中的客户端方法来测试它。我无法弄清楚如何在游戏启动时运行客户端,因为每次我尝试创建一个创建套接字的方法时,游戏会冻结并且不会连接。我认为它是因为套接字就像一个无限循环,它永远不会继续使用其余的代码。所以我查看了线程,我创建了一个新的线程,建立了一个连接,游戏是独立的,但猜猜是什么?游戏冻结并连接或播放,不连接大声笑。
任何帮助都会很棒我不知道该怎么做,如果你想让我发布我的所有代码,我想出了我的想法和idk因为它非常冗长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);
// }
}
答案 0 :(得分:0)
我认为您可能遇到的一个问题(或即将运行)是Java applets aren't allowed to make TCP connections to any server other than the server that hosts the applet。因此,除非您在localhost上运行Web服务器并将Web浏览器指向localhost,否则从applet到127.0.0.1的TCP连接将引发异常而无法正常工作。
据推测,为了在Java小程序上进行多人游戏工作,您需要在与Web服务器相同的计算机上运行单独的服务器进程。然后,各种Java小程序都可以连接到此服务器进程(因为它们可以连接到Web服务器的IP地址),并且服务器进程将负责根据需要将信息从一个Java小程序转发到另一个小程序。