我是一名初学程序员,目前仍处于Java项目中。我有一个完全工作的单人扫雷游戏,面向对象,我正在尝试实现TCP多人游戏功能。游戏有一个控制类,它处理视图,游戏场,计时器,标签,有动作听众等。 对于多人游戏,我正在尝试创建一个单独的线程,它具有Socker和ServerSocket,并且取决于构造函数传递的参数,充当主机或客户端。在运行时,它应该尝试从输入流中读取我的自定义Packet类,而另一种方法可以发送数据包。这是代码:
公共类MultiThread扩展了线程{
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上建立,但是在尝试初始化传入和传出字段时,我会抛出异常。 对不起,如果代码很乱,我觉得我有一些严重的误解,所以感谢任何帮助。