Hallo, :wink:
Ich versuche gerade ein Object übers Netzwerk zu verschicken, leider wirft er bei mir eine häßlich Exception.
Weiß einer von euch wie ich sie behandeln kann und wodurch sie ausgelöst wird. Hab schon gegooglet, aber leider nichts brauchbares gefunden.
Hier ein wenig Code:
Das ist mein Object, welches ich verschicken will.
Die Client Klasse. hier verschicke ich das Object in einem Thread.
Meine Server klasse, speichert alle Connections in einem Vector
Und meine Connection klasse
Hoffe einer von euch kann mir einen guten Tipp geben, wie ich die Exception beseitigen kann.
mfg X_Master
Ich versuche gerade ein Object übers Netzwerk zu verschicken, leider wirft er bei mir eine häßlich Exception.
Weiß einer von euch wie ich sie behandeln kann und wodurch sie ausgelöst wird. Hab schon gegooglet, aber leider nichts brauchbares gefunden.
Hier ein wenig Code:
Das ist mein Object, welches ich verschicken will.
Code:
import java.io.Serializable;
public class PlayerObject implements Serializable {
public int x;
public int y;
public int w;
public int h;
public PlayerObject(int x, int y, int w, int h) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
}
Die Client Klasse. hier verschicke ich das Object in einem Thread.
Code:
public PlayerObject playerObj;
public static final int port = 4413;
public Socket serverSocket;
public OutputStream out;
public ObjectOutputStream objectOut;
public Client(Main main) {
super();
this.main = main;
this.setBackground(Color.white);
playerObj = new PlayerObject(100, 250, 30, 20);
try {
serverSocket = new Socket("localhost", port);
out = serverSocket.getOutputStream();
objectOut = new ObjectOutputStream(out);
} catch (IOException e) {
System.out.println("Connection to the Server missed: " + e);
System.exit(1);
}
if (thread == null) {
thread = new Thread(this);
thread.start();
}
}
public void run() {
while (true) {
try {
thread.sleep(70);
}
catch(InterruptedException e) {
System.out.println("ERROR: " + e);
}
repaint();
try {
objectOut.writeObject(playerObj);
objectOut.flush();
} catch(IOException e) {
System.out.println("Transmission missed: " + e);
}
}
}
Meine Server klasse, speichert alle Connections in einem Vector
Code:
import java.net.*;
import java.io.*;
import java.util.*;
public class Server extends Thread {
public static final int port = 4413;
private ServerSocket serverSocket;
private Vector connections;
public Server() {
try {
serverSocket = new ServerSocket(port);
System.out.println("Server running ...");
} catch (IOException e) {
System.err.println("Server could not be started. Server is terminated.");
System.exit(1);
}
connections = new Vector();
}
public static void main(String[] args) {
Server server = new Server();
server.start();
}
public void run() {
try {
while(true) {
Socket clientSocket = serverSocket.accept();
Connection c = new Connection(this, clientSocket);
connections.addElement(c);
broadcast();
}
} catch (IOException e) {
System.out.println("Connection to the Client missed: " + e);
System.exit(1);
}
}
public void broadcast() {
Connection you;
for (int i = 0; i < connections.size(); i++) {
you = (Connection)connections.get(i);
try {
if(you.clientSocket.isClosed() != true) {
you.objectOut.writeObject(you.object);
}
} catch(IOException e) {
try {
you.clientSocket.close();
connections.remove(i);
} catch (IOException e2) {
System.out.println("Connection couldn't be closed: " + e2);
}
System.out.println("Transmission missed: " + e);
}
}
}
}
Und meine Connection klasse
Code:
import java.net.*;
import java.io.*;
public class Connection extends Thread {
private Server server;
public Socket clientSocket;
public OutputStream out;
public ObjectOutputStream objectOut;
public InputStream in;
public ObjectInputStream objectIn;
public PlayerObject object;
public Connection(Server server, Socket clientSocket) {
this.server = server;
this.clientSocket = clientSocket;
try {
out = clientSocket.getOutputStream();
objectOut = new ObjectOutputStream(out);
in = clientSocket.getInputStream();
objectIn = new ObjectInputStream(in);
} catch (IOException e) {
try {
clientSocket.close();
} catch (IOException e2) {
System.err.println("Connection couldn't be closed: " + e2);
}
System.err.println("Transmission missed: " + e);
return;
}
this.start();
}
public void run() {
while(true) {
try {
object = (PlayerObject)objectIn.readObject();
}
catch (IOException e) {
try {
objectOut.close();
out.close();
objectIn.close();
in.close();
clientSocket.close();
} catch (IOException e2) {
System.err.println("Connection couldn't be closed: " + e2);
}
System.err.println(e);
}
catch (ClassNotFoundException e) {
try {
objectOut.close();
out.close();
objectIn.close();
in.close();
clientSocket.close();
} catch (IOException e2) {
System.err.println("Connection couldn't be closed: " + e2);
}
System.err.println(e);
}
}
}
}
Hoffe einer von euch kann mir einen guten Tipp geben, wie ich die Exception beseitigen kann.
mfg X_Master