我是一个初学者程序员,目前被困在一个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 上建立,但在尝试初始化传入和传出字段时抛出异常。对不起,如果代码是一团糟,我觉得我有一些严重的误解,所以任何帮助表示赞赏。