Hallo,
ich möchte mir einen kleinen Chat basteln aber bei der Übertragung fängt schon das Problem an.
Hier ersteinmal die Source-Dateien:
Server.java:
ServerAcceptor.java
ServerReader.java
ServerActionController.java
Der wichtige Teil des Clients:
Die Ausgabe sieht wie folgt aus:
Nachdem ein Objekt übertragen wurde, wird in der ServerReader Klasse andauernd EOFExceptions geworfen. Blockiert readObject() nicht, bis etwas da ist, was gelesen werden kann? Wie kann ich das Werfen der Exceptions verhindern?
Ich bedanke mich für jede Antwort.
Gruß
ich möchte mir einen kleinen Chat basteln aber bei der Übertragung fängt schon das Problem an.
Hier ersteinmal die Source-Dateien:
Server.java:
Java:
package chat.server;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server {
private ServerSocket serverSocket;
private ArrayList<Socket> clients;
public Server(int port) {
try {
this.serverSocket = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Server wurde gestartet!");
clients = new ArrayList<Socket>();
ServerAcceptor acceptor = new ServerAcceptor(this);
acceptor.start();
}
public ServerSocket getServerSocket() {
return this.serverSocket;
}
public ArrayList<Socket> getClients() {
return this.clients;
}
public static void main(String[] args) {
new Server(1205);
}
}
ServerAcceptor.java
Java:
package chat.server;
import java.io.IOException;
import java.net.Socket;
public class ServerAcceptor extends Thread {
private Server server;
public ServerAcceptor(Server server) {
this.server = server;
}
@Override
public void start() {
super.start();
System.out.println("ServerAcceptor wurde gestartet und wartet auf Anmeldungen!");
}
@Override
public void run() {
while(true) {
try {
Socket clientSocket = server.getServerSocket().accept();
server.getClients().add(clientSocket);
new ServerReader(clientSocket);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
ServerReader.java
Java:
package chat.server;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.Socket;
public class ServerReader extends Thread {
private static int INST = 0;
private Socket client;
public ServerReader(Socket client) {
INST++;
this.client = client;
this.start();
}
@Override
public void start() {
super.start();
System.out.println("ServerReader: " + INST);
}
@Override
public void run() {
ServerActionController ctrl = ServerActionController.getInstance();
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(client.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
while(true) {
try {
Object obj = ois.readObject();
ctrl.doAction(client, obj);
} catch(IOException e) {
e.printStackTrace();
//System.exit(0);
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
}
}
ServerActionController.java
Java:
package chat.server;
import java.net.Socket;
import chat.objects.Message;
public final class ServerActionController {
private static final ServerActionController INSTANCE = new ServerActionController();
private ServerActionController() {}
public static ServerActionController getInstance() {
return INSTANCE;
}
public void doAction(Socket sender, Object obj) {
if(obj instanceof Message) {
Message msg = (Message) obj;
System.out.println("-------------------");
System.out.println(sender.getInetAddress().toString() + ":");
System.out.println(msg.getMessage());
System.out.println("-------------------");
}
}
}
Der wichtige Teil des Clients:
Java:
socket = new Socket("127.0.0.1", 1205);
oos = new ObjectOutputStream(socket.getOutputStream());
Message msg = new Message("Test");
oos.writeObject(msg);
Die Ausgabe sieht wie folgt aus:
Code:
Server wurde gestartet!
ServerAcceptor wurde gestartet und wartet auf Anmeldungen!
ServerReader: 1
-------------------
/127.0.0.1:
Test
-------------------
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at chat.server.ServerReader.run(ServerReader.java:37)
Ich bedanke mich für jede Antwort.
Gruß