- 12V Akku mit 280 Ah bauen         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 38

Thema: Java Server/Plugin Manager

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    14.12.2004
    Beiträge
    9
    Anzeige

    Praxistest und DIY Projekte
    Hi,

    der Fehler müsste im Konstruktor von Client sein, die Zeile ist falsch:
    Code:
    s = this.s;
    es müsste eigentlich folgendes richtig sein:
    Code:
    this.s = s;
    Gruß, Dirk

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    102
    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.

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    102
    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:
    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 wesentliche Unterschied besteht darin, das der Thread jetzt nicht mehr Client selber sonder eine Unterklasse, Input, ist.

    Der betreffende Code aus RSS.java ist folgender:
    Code:
    private static Client clients[];
    
    	public static void registerPlugin(int id, Client client)
    	{
    		clients[id] = client;
    	}
    Ich hoffe mir kann jemand helfen?
    Danke.

    Gruß, Jan.

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    102
    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.

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    14.12.2004
    Beiträge
    9
    Hast du denn irgendwo im Client die Initialisierung des arrays?
    also sowas wie:

    clients = new Client[43];

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    102
    Oh nein!! Das hab ich vergessen ^^ Naja, jetzt funktioniert es! Danke!

    Gruß, Jan.

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    102
    Hi!

    Ich hab wiedermal ein Problem mit meinem Java Programm. Hier schonmal ein Update von Client.java (hat sich aber nicht viel geändert):
    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());
    			}
    		}
    	}
    }
    Immer wenn sich ein Plugin zum Server connected gibt Client.Input.run() eine IOExcpetion aus: Connection refused.
    Der Fehler tritt in dem Block
    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);
    					}
    auf. Hat jemand eine Idee wo das Problem liegt?

    Gruß Jan
    irOS - independent robot operating system
    www.ir-os.de

  8. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    49
    Beiträge
    1.562
    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ß
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.08.2004
    Ort
    Bremen
    Alter
    34
    Beiträge
    102
    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.
    irOS - independent robot operating system
    www.ir-os.de

  10. #20
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    31.01.2004
    Ort
    36399
    Alter
    49
    Beiträge
    1.562
    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ß
    P: Meine Tochter (06.11.07) und https://www.carnine.de
    M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen