1

我是一个初学者程序员,目前被困在一个java项目上。我有一个功能齐全的单人扫雷游戏,面向对象,我正在尝试实现 TCP 多人功能。游戏有一个控制类,它处理视图、游戏字段、计时器、标签、具有动作侦听器等。对于多人游戏,我正在尝试创建一个单独的线程,它具有 Socker 和 ServerSocket,并取决于构造函数传递的参数,充当主机或客户端。运行时,它应该尝试从输入流中读取我的自定义 Packet 类,并且另一种方法可以发送数据包。这是代码:

公共类多线程扩展线程{

GameControl gc;
ServerSocket servSocket;
Socket socket;
Packet data;
ObjectInputStream incoming;
ObjectOutputStream outgoing;
Boolean isHost;
Boolean commEnd;

public MultiThread(GameControl gc, Boolean isHost) {
    this.gc = gc;
    this.isHost = isHost;
    this.commEnd = false;
    gc.chatDialog.setVisible(true);
}

public void run() {
    try {
        if (isHost) {
            servSocket = new ServerSocket(1234);
            gc.chatDialog.status.setText("Awaiting connection...");
            socket = servSocket.accept();
            gc.chatDialog.status.setText("Connected.");
            incoming = new ObjectInputStream(socket.getInputStream());
            outgoing = new ObjectOutputStream(socket.getOutputStream());
        }
        else if (!isHost){
            socket = new Socket("localhost", 1234);
            if (socket.isConnected()) {
                gc.chatDialog.status.setText("Connected.");
                incoming = new ObjectInputStream(socket.getInputStream());
                outgoing = new ObjectOutputStream(socket.getOutputStream());
            }
            else {
                gc.chatDialog.status.setText("No connection.");
            }
        }


        while (!commEnd) {
            try {
                Thread.sleep(100);
                data = (Packet)incoming.readObject();
                System.out.println(data.msg);
                gc.chatDialog.chatArea.append(data.getMsg());   
            }
            catch (IOException e) {e.printStackTrace();}
        }

        System.out.println("asd");
        gc.chatDialog.status.setText("No connection");
        incoming.close();
        outgoing.close();
        socket.close();
        servSocket.close();
    }

        catch (Exception e) {e.printStackTrace();}
}

public void sendPacket(Packet p) {
    try {
        outgoing.writeObject(p);
    }
    catch (IOException e) {e.printStackTrace();}
}

}

连接在 localhost 上建立,但在尝试初始化传入和传出字段时抛出异常。对不起,如果代码是一团糟,我觉得我有一些严重的误解,所以任何帮助表示赞赏。

4

0 回答 0