Hi,
der Fehler müsste im Konstruktor von Client sein, die Zeile ist falsch:
es müsste eigentlich folgendes richtig sein:Code:s = this.s;
Gruß, DirkCode:this.s = s;
Druckbare Version
Hi,
der Fehler müsste im Konstruktor von Client sein, die Zeile ist falsch:
es müsste eigentlich folgendes richtig sein:Code:s = this.s;
Gruß, DirkCode:this.s = s;
Oh danke, ich probiers!
(Ich werd das einfach übersichtlicher machen in dem ich den übergebenen Socket cs (für ClientSocket) und den andern s nenne, also s = cs;)
Gruß, Jan.
Cool, es klappt! Also zumindest das eine ;-)
Es gibt jetzt beim herstellen der Verbindung keine NullPointerException mehr. Danke!
Jetzt gibt es wieder ein anderes Problem. :-( Wieder eine NullPointerException. Allerdings erst, wenn der oben erwähnte String "identitiy", der die ID des Plugins enthällt, gesendet wurde. Die Fehlerausgabe ist folgende:
Exception in thread "Thread-2" java.lang.NullPointerException
at main.RSS.registerPlugin(RSS.java:9)
at main.Client.start(Client.java:41)
at main.Client.<init>(Client.java:26)
at main.Server.run(Server.java:19)
at java.lang.Thread.run(Thread.java:595)
Da ich am Code von Client.java noch ein bisschen gewerkelt hab ist hier ein update:
Der wesentliche Unterschied besteht darin, das der Thread jetzt nicht mehr Client selber sonder eine Unterklasse, Input, ist.Code:import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class Client
{
private Socket s;
private Thread t;
private BufferedReader in;
private PrintStream out;
private int id;
public Client(Socket cs)
throws IOException
{
s = cs;
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
out = new PrintStream(s.getOutputStream());
id = Integer.parseInt(in.readLine());
start();
}
public final int getID()
{
return id;
}
public void sendMessage(String msg)
{
out.print(msg);
}
private void start()
{
RSS.registerPlugin(getID(), this);
t = new Thread(new Input());
t.start();
}
private void end()
throws IOException, InterruptedException
{
RSS.unregisterPlugin(getID());
s.close();
t.join();
}
class Input
implements Runnable
{
public void run()
{
try
{
while(s.isConnected() == true)
{
String input = in.readLine();
int tgid = Byte.parseByte(input.substring(0,2));
String msg = input.substring(2);
RSS.messagePlugin(tgid,msg,id);
}
if(s.isClosed() == true)
end();
else
run();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
catch(InterruptedException e)
{
System.out.println(e.getMessage());
}
}
}
}
Der betreffende Code aus RSS.java ist folgender:
Ich hoffe mir kann jemand helfen?Code:private static Client clients[];
public static void registerPlugin(int id, Client client)
{
clients[id] = client;
}
Danke.
Gruß, Jan.
Hi.
Ich wollte nochmal drauf hinweisen, dass ich meinen Beitrag editiert habe und dort das neue Problem beschrieben hab, weil ich alleine nicht damit klargekommen bin. Ich hab grade gesehen, dass immer noch das alte Beitragsdatum da steht.
Vielen Dank.
Gruß Jan.
Hast du denn irgendwo im Client die Initialisierung des arrays?
also sowas wie:
clients = new Client[43];
Oh nein!! Das hab ich vergessen ^^ Naja, jetzt funktioniert es! Danke!
Gruß, Jan.
Hi!
Ich hab wiedermal ein Problem mit meinem Java Programm. Hier schonmal ein Update von Client.java (hat sich aber nicht viel geändert):
Immer wenn sich ein Plugin zum Server connected gibt Client.Input.run() eine IOExcpetion aus: Connection refused.Code:import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class Client
{
private Socket s;
private Thread t;
private BufferedReader in;
private PrintStream out;
private int id;
public Client(Socket cs)
throws IOException
{
s = cs;
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
out = new PrintStream(s.getOutputStream());
id = Integer.parseInt(in.readLine());
start();
}
public int getID()
{
return id;
}
public void sendMessage(String msg)
{
out.print(msg);
}
private void start()
{
RSS.registerPlugin(getID(), this);
t = new Thread(this.new Input());
t.start();
}
private void end()
throws IOException, InterruptedException
{
RSS.unregisterPlugin(getID());
s.close();
t.join();
}
class Input
implements Runnable
{
public void run()
{
try
{
while(true)
{
if(s.isConnected() == true)
{
String input = in.readLine();
int tgid = Integer.parseInt(input.substring(0,2));
String msg = input.substring(2);
RSS.messagePlugin(tgid,msg);
}
else
end();
}
}
catch(IOException e)
{
System.err.println("Client: IOException - " + e.getMessage());
}
catch(InterruptedException e)
{
System.err.println("Client: InterrupedException - " + e.getMessage());
}
}
}
}
Der Fehler tritt in dem Block
auf. Hat jemand eine Idee wo das Problem liegt?Code:if(s.isConnected() == true)
{
String input = in.readLine();
int tgid = Integer.parseInt(input.substring(0,2));
String msg = input.substring(2);
RSS.messagePlugin(tgid,msg);
}
Gruß Jan
ich was ja nicht was du mit dem server machen willst.
aber guck dir mal den link in der mein fus zeile an vielleicht hats du
lust mit zumachen.
Gruß
Ich habe weiter oben schon geschrieben, was damit beabsichtigt ist. Aber ich fasse es einfach nochmal kurz zusammen. Das ganze ist ein Plugin-Manager auf TCP Basis. Die Clients verbinden sich mit dem Server und können dann über TCP Nachrichten an andere Plugins, den Roboter oder den Server senden.
Der Code von Client.java oben ist sozusagen das "Kommunikations-Interface" für ein Plugin. Wenn sich ein Plugin verbindet wird ein neues Exemplar der Klasse Client angelegt und in einem Array gespeichert. Das Plugin kann dann Zeichenketten an das ihr zugewiesene Exemplar der Client Klasse senden und das wiederum leitet das an den Server weiter, der das Verarbeitet/weiterschickt.
Der Block oben ist ein Thread, der sofort, wenn eine neue Nachricht vom Plugin reinkommt das der messagePlugin()-Methode des Hauptprogramms (RSS) über gibt.
Kann das Problem darin liegen, dass der Fehler auftritt, weil nicht sofort eine Nachricht reinkommt?
Gruß, Jan.
Hallo Mja,
sorry wenn ich was über lesen habe.
aber das was du da beschreibst haben Johannes und ich schon sehr Ähnlich realiesiert. Vielleicht guckst du einfach mal auf unserer HP vorbei.
Gruß