Habe hier aus diesem FAQ den Code übernommen und etwas verändert:
http://www.java-forum.org/de/viewtopic.php?t=6033&highlight=mehrere+verbindungen
Nun erscheint dieser Fehler sobald ein Client einen String schickt:
An was liegt das? Ich weis, dass beim Aufruf server.addClient(name, this) das Objekt "this" nicht referenziert wird, aber warum?
http://www.java-forum.org/de/viewtopic.php?t=6033&highlight=mehrere+verbindungen
Code:
import java.io.*;
import java.net.*;
import java.util.*;
public class Server{
private Hashtable clients;
private int port = 3141;
Server(){
}
Server(int port){
this.port = port;
clients = new Hashtable();
}
public void addClient(String name, ServerThread t){
clients.put(name, t);
}
public void removeClient(String name){
clients.remove(name);
}
public void send(String name, String msg) throws IOException{
for(Enumeration e = clients.keys();e.hasMoreElements(); ){
((ServerThread) clients.get((String) e.nextElement())).send(name + ": " + msg);
}
}
public void start() throws IOException{
ServerSocket server = new ServerSocket(port);
System.out.println("Server gestartet...");
while (true) {
Socket client = server.accept();
ServerThread t = new ServerThread(client, this);
t.start();
}
}
public static void main(String [] args) throws IOException{
Server server = new Server();
server.start();
}
}
Code:
import java.io.*;
import java.net.*;
import java.util.*;
public class ServerThread extends Thread{
private Server server;
private Socket client;
private BufferedWriter out;
public ServerThread(Socket client, Server server){
this.server = server;
this.client = client;
}
public void run(){
BufferedReader in;
String name, msg;
try{
//InputStream
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
//OutputStream
out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
//
name = in.readLine();
server.addClient(name, this);
System.out.println("+ Client " + name + " hat sich angemeldet!");
for (String buffer; (buffer = in.readLine()) != null; ) {
msg = in.readLine();
server.send(name, msg);
System.out.println(">Client " + name + " schreibt an: " + msg);
}
server.removeClient(name);
System.out.println("- Client " + name + " hat sich abgemeldet!");
//
// aufräumen
out.close();
in.close();
client.close();
}
catch(IOException e){
System.err.println(e);
}
}
public void send(String msg) throws IOException {
out.write(msg);
out.newLine();
out.flush();
}
}
Nun erscheint dieser Fehler sobald ein Client einen String schickt:
Exception in thread "Thread-1" java.lang.NullPointerException
at Server.addClient(Server.java:19)
at ServerThread.run(ServerThread.java:27)
An was liegt das? Ich weis, dass beim Aufruf server.addClient(name, this) das Objekt "this" nicht referenziert wird, aber warum?