1
私はボンバーマンのMPを作りようとしていますが、すべてがうまくいきます、プレーヤー、障害物などが爆弾です。私が爆弾を置くたびに、それを送信せずクラッシュして例外をスローします。今、私は爆弾の調整(bX、bY)を送信しています。私はオブジェクトとして爆弾を送ろうとしましたが、成功もありませんでした。だから私はこの例外をどのように取り除くと思いますか?そして私はそれをどうやって正しいと思いますか?ボンバーマンネットワーク通信 - 爆弾を送ることはできません
package bomberman;
import java.awt.AWTException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Timer;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Client implements Runnable, Serializable, ActionListener{
Thread vlakno = new Thread(this);
Socket soc;
ViewMP view;
Player pl2 = new Player(27, 5, 0, 0, "img/player.png");
ArrayList<Map> list;
ArrayList<Bomb> bList;
ArrayList<Bonus> Bonuslist;
int bX, bY;
ObjectInputStream ois;
ObjectOutputStream oos;
String add;
public Client(String add) {
vlakno.start();
this.add = add;
}
@Override
public synchronized void run() {
try {
view = new ViewMP(pl2, 50);
view.setListen(this);
} catch (InterruptedException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
} catch (AWTException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
view.setTitle("Client");
try {
soc = new Socket(add, 1252);
System.out.println(soc.getLocalAddress());
oos = new ObjectOutputStream(soc.getOutputStream());
ois = new ObjectInputStream(soc.getInputStream());
oos.writeObject(view.getBonus());
Bonuslist = (ArrayList<Bonus>) ois.readObject();
while(true){
oos = new ObjectOutputStream(soc.getOutputStream());
ois = new ObjectInputStream(soc.getInputStream());
oos.writeObject(view.getPl());
pl2 = (Player) ois.readObject();
view.setPl2(pl2);
oos.writeObject(view.getBreakableMap());
list = (ArrayList<Map>) ois.readObject();
view.setBreakableMap(list);
oos.writeObject(null);
if (ois.readObject() != null) {
System.out.println("XD");
bX = (int) ois.readObject();
bY = (int) ois.readObject();
}
}
} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Override
public void actionPerformed(ActionEvent e) {
try {
oos.reset();
oos.writeObject(view.getbX());
oos.writeObject(view.getbY());
view.addBomb(new Bomb(bX, bY, 0, pl2, 0));
} catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
のActionListenerは毎回スペースバーを押すと呼ばれている(爆弾をドロップ):
public class Server implements Runnable, Serializable, ActionListener{
Thread vlakno = new Thread(this);
ServerSocket server;
Socket soc;
int bX, bY;
Player pl;
Player pl2 = new Player(500, 27, 0, 0, "img/player.png");
ViewMP view;
ArrayList<Map> Maplist;
ArrayList<Map> brmap = new ArrayList();
ArrayList<Bonus> Bonuslist;
ArrayList<Bomb> bList;
ObjectInputStream ois;
ObjectOutputStream oos;
public Server(){
vlakno.start();
}
@Override
public synchronized void run() {
try {
view = new ViewMP(pl2, 50);
view.setTitle("Server");
view.setListen(this);
komunikuj();
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
} catch (InterruptedException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
} catch (AWTException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
private synchronized void komunikuj() throws IOException, ClassNotFoundException{
server = new ServerSocket(1252);
soc = server.accept();
oos = new ObjectOutputStream(soc.getOutputStream());
ois = new ObjectInputStream(soc.getInputStream());
Bonuslist = (ArrayList<Bonus>) ois.readObject();
oos.writeObject(view.getBonus());
view.setBonus(Bonuslist);
while(true){
try {
oos = new ObjectOutputStream(soc.getOutputStream());
ois = new ObjectInputStream(soc.getInputStream());
pl = (Player) ois.readObject();
oos.writeObject(view.getPl());
view.setPl2(pl);
Maplist = (ArrayList<Map>) ois.readObject();
oos.writeObject(view.getBreakableMap());
view.setBreakableMap(brmap);
oos.writeObject(null);
if (ois.readObject() != null) {
System.out.println("XD");
bX = (int) ois.readObject();
bY = (int) ois.readObject();
}
} catch (Exception e){
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
try {
oos.reset();
oos.writeObject(view.getbX());
oos.writeObject(view.getbY());
view.addBomb(new Bomb(bX, bY, 0, pl2, 0));
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
はここに私のクライアントコードです:
は、ここに私のサーバーのコードです。
例外があります。
java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1379)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at bomberman.Client.run(Client.java:67)
at java.lang.Thread.run(Thread.java:745)
これは私のクライアントとサーバー間の通信の最初の試みですが、私はどんな提案もありがとう! ありがとうございます。
お返事ありがとうございます!しかし、私はそれをすべてのループでやっていけないとき、それはちょうどうまくいってから何も送ってこない。したがって、運動などのコミュニケーションはありません。 – PogChamp69