Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多人游戏中的小程序制作_Java_Sockets_Applet_Multiplayer - Fatal编程技术网

Java 多人游戏中的小程序制作

Java 多人游戏中的小程序制作,java,sockets,applet,multiplayer,Java,Sockets,Applet,Multiplayer,~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is a intro to my problem Skip if you don't care. 我有一个java小程序,我是java的新手。CSIS10a第一学期java简介。我和我的朋友有一个项目,为我们的期末考试制作一个java小程序游戏。我们以A结束比赛,在我看来这是最好的。想想小行星吧,

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

            This is a intro to my problem Skip if you don't care.
我有一个java小程序,我是java的新手。CSIS10a第一学期java简介。我和我的朋友有一个项目,为我们的期末考试制作一个java小程序游戏。我们以A结束比赛,在我看来这是最好的。想想小行星吧,不过是像R-Type这样的侧面滚动条。我的数学朋友做了里面所有的物理,一些很酷的东西,我要说的是,我的另一个朋友是艺术人,FX画了船,做了爆炸之类的,也非常棒。我想我是个代码猴子,因为我在网络方面有丰富的背景,而且我是Linux服务器的系统管理员。所以我对bash了如指掌,java对我来说非常容易,应该说比我的同龄人容易得多。所以在决赛之后,他们说嘿,我们应该把它放到网上,让它成为多人游戏!,当然,我说,这应该很简单!设置一个java服务器,让他们来回发送X&Y坐标。为X&Y做一个接球手和接球手,然后我们就开始做生意了!当然我错了,哈哈

所以。。。经过一个月的思考,每周都在这里发布一些小问题,我决定将整个问题发布在这里,看看是否能得到一些指导

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

            This is a intro to my problem Skip if you don't care.
我已经根据echo服务器示例转换了一个简单的聊天客户端/服务器系统,将int而不是字符串发送到服务器,服务器将int发送到第二个客户端。到目前为止,客户端仍然是一个应用程序,而不是applet的一部分,我们已经通过在单独运行的游戏中调用clients方法对其进行了测试。我不知道如何在游戏启动时运行客户端,因为每次我尝试创建一个创建套接字的方法时,游戏都会冻结并且无法连接。我认为这是因为套接字就像一个无限循环,它永远不会继续处理代码的其余部分。所以我研究了线程,我制作了一个新的线程来建立一个连接,游戏是分开的,但是猜猜怎么着?游戏冻结并连接,或者它玩但不连接lol

任何帮助都会很好,我不知道该怎么办,如果你想让我发布我所有的代码,我没有主意和idk,因为它相当长,哈哈,但是如果你想,我会发布我的客户端类

                                End of intro
}

这是我试图在游戏中实现的代码,作为一个类,我可以调用,但没有骰子

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();
}

我认为您可能会遇到或即将遇到的一个问题是Java小程序。因此,除非您在localhost上运行web服务器,并将web浏览器也指向localhost,否则从小程序到127.0.0.1的TCP连接将引发异常而无法工作


大概为了使多人游戏在Java小程序上工作,您需要一个单独的服务器进程,该进程与web服务器运行在同一台机器上。然后,各种Java小程序都可以连接到此服务器进程,因为它们被允许连接到web服务器的IP地址,并且服务器进程将负责根据需要将信息从一个Java小程序转发到另一个Java小程序。

使用您当前编写的代码,您将无法知道发生了什么,或者你的冰点在哪里。考虑使用调试器和设置断点,或者更简单地,用Soel.Out.PrtLn喷洒代码。语句,告诉您程序运行时某些字段的状态。如果我记得的话,getInputStream块可以解释您描述的冻结。因此,很可能您没有正确发送数据。我有一个java服务器,但它不是在托管小程序的同一台机器上运行的,但我将在同一台机器上托管小程序和java服务器。嗯,小程序通常在客户机/播放器机器上运行。他们下载小程序并在浏览器上运行。所以服务器的访问者将无法使用小程序。所以没有办法让小程序有多人游戏?我知道这是可以做到的。我以前用过!这是可以做到的,只是游戏服务器必须与服务小程序的web服务器在同一台机器上运行,小程序必须通过TCP连接,因为通过TCP连接到服务小程序的同一IP地址是他们唯一可以做的,从网络角度看