# jar-File auf Webserver starten



## JackHammer2xxl2 (13. Februar 2010)

Hallo hoffe auch das ich hier richtig bin...
Ich habe keine Ahnung wonach ich noch suchen soll ...
habe in Java ein Projekt fertig "Chat"  eine app.class die als Applet läuft in einer start.html eingebunden ist und eine Server.jar ... die alle clients "Applet's" verbindet das läuft zu Hause auch alles wunderbar web Server ist  localhost mit XAMPP ....

nun wollte ich das ganze online ausprobieren ein Freun hat mir etwas Web Space gegeben habe mit FileZilla alle dateien hoch geladen jetzt das Problem ich weis nicht wie ich meine Jar file dort starte 
habe so viel jetzt gelesen ob jsp jnlp ect... 

wäre für hinweise sehr dankbar 

Lg Kay


----------



## Kai008 (13. Februar 2010)

Du wirst die Datei (ohne eingeschleußten Shellcode ect.) nicht starten können. Musst dir wohl einen v- oder Rootserver mieten oder "borgen".
Wäre nicht lustig, wenn jeder bei jeden Provider Programme starten könnte wie er lust hat.


----------



## JackHammer2xxl2 (14. Februar 2010)

Wow danke für deine schnelle Antwort. 
und da gebe ich dir auch völlig recht... 

wenn es ok ist würde ich gerne meine Frage erweitern ... und zwar haben wir es jetzt auf nem root Server geschafft und läuft .... aber nicht so wie in unserem xampp ...

zur Erläuterung  meine "ChatServer.jar" die als Applikation dort gestartet wird verbindet sich auch mit allen evt. gestarteten Applet's nur die Kommunikation via Socket und DataOutPutstream inc. writeUTF funktioniert auf der externen Server Umgebung nicht   nur auf unserer xampp Umgebung in einem Anderem forum war das Problem gelöst mit einem anderem Port nur bei uns nicht ...

getestet haben wir mit allen Port Freigabe.
Socket Port verändert.
Aktuellerer jre obwohl nichts außergewöhnliches Implementiert wurde "Chat" für Applet.
Apache Server ,  Debian

Da dieses Thema so breit gefächert ist und die Quelle des Problems nicht bekannt Server seitens ect... hoffe ich doch sehr das es ok ist das ich mit dem Thema hier weiter mache vielen Dank 
Lg Kay  

Anhang der Link zu dem anderem Forum der das selbe Problem beschreibt ( hoffe das es ok ist wenn ich hier auf ein anderes bord linke   )

http://www.java-forum.org/netzwerkp...nnection-aufgebaut-keine-daten-geschickt.html


----------



## Kai008 (14. Februar 2010)

Poste mal etwas Quellcode, event. liegt es daran.
Ich hätte es aber eher so gemacht, dass die Applets die Verbindung aufbauen.


----------



## JackHammer2xxl2 (14. Februar 2010)

Sehr nett von dir Kai dich meinem Problem anzunehmen 

frage mich nur wie du darauf kommst das es am Code liegen könnte wenn ich doch schreibe das es im Xampp läuft ...

eigentlich verbinden sich die Applets auch mit dem "Server.jar" dieser nimmt die Streams entgegen und sendet dann an alle evt. vorhandenen Applets es sind 3 klassen Applet , Server, und eine afaik Aggregation zu den Client Objecten diese werden in einer Collection gehalten damit ich über einen Iterator an alle senden kann ich schick mal den Code für's Applet 

PS: freu mich sehr über deine hilfe Dankeschön


```
public class App extends JApplet implements Runnable {
	public static final int PORT = 4711;
	Socket 			 socket;
	DataInputStream	 in;
	DataOutputStream out;
	JTextField		 inputfield;
	JTextArea 		 outputarea;
	Thread			 thread;


	@Override
	public void init() {
		
		inputfield.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					out.writeUTF(inputfield.getText()  );
					inputfield.setText("" );
				} catch (IOException e) {
					e.printStackTrace();
					JOptionPane.showMessageDialog(null, e.toString() );
				}
			}
		});
	}


	@Override
	public void start() {
		try {
			socket = new Socket(this.getCodeBase().getHost(), PORT);
			in = new DataInputStream(socket.getInputStream() );
			out = new DataOutputStream(socket.getOutputStream() );
			
		} catch (IOException e) {
			this.showStatus(e.toString());
			ausgabe("Verbindung zum Server fehlgeschlagen!");
			System.exit(1);
		}

		ausgabe("Verbindung zum Server aufgenommen...");

		if (thread == null) {
			thread = new Thread(this);
			thread.setPriority(Thread.MIN_PRIORITY);
			thread.start();
		}
	}

	private void ausgabe(String text) {
		outputarea.append("*** "+text+" ***\n");
	}


	@Override
	public void stop() {
		try {
			socket.close();
		} catch (IOException e) {
			this.showStatus(e.toString());
		}

		if ((thread !=null) && thread.isAlive()) {
			thread.interrupt();
			thread = null;
		}

	}


	@Override
	public void run() {
		String line;

		try {
			while(true ) {
				line = in.readUTF();
				if(line!=null)
					outputarea.append(line );
				//JOptionPane.showMessageDialog(null, line );
			}
		} catch (IOException e) { 
			ausgabe("Verbindung zum Server abgebrochen");
			//JOptionPane.showMessageDialog(null, e.toString() );
		}

	}
	
		
}//	class App
```

ich habe die init methode sehr beschnitten denke das die Deklarationen ausreichen werden um den Code zu analysieren 
natürlich sind alle Componenten auch inizialisiert 
auch Layout usw habe ich raus geholt wie gesagt da es läuft wo es nich laufen soll ..... 

schicke auch gerne die MyServer.class wenn bedarf besteht 


Lg Kay

PPS Syntax high light für java finde ich nicht .... wie schade sieht hier immer so toll aus ... 
sowieso schwer beeindruckt hier von dem Bord || Forum && Usern


----------



## Jellysheep (14. Februar 2010)

Für Java-Syntax-Highlight schreibe einfach "java" statt "code" in die eckigen Klammern:
[ code=java ]...[ /code ]
Und bitte schreibe in deine Beiträge auch Kommas und Punkte. Es ist sehr schwer, diese zu lesen.


----------



## Kai008 (14. Februar 2010)

JackHammer2xxl2 hat gesagt.:


> frage mich nur wie du darauf kommst das es am Code liegen könnte wenn ich doch schreibe das es im Xampp läuft ...


 Meine erste Idee war, dass du vergessen hast, dass Applet gedownloadet werden. Also z. B. am localhost deine Verbindung per "localhost" aufzubauen geht wenn es am selben Rechner liegt, vom HTTP-Server gedownloadet musst du natürlich auch dessen IP übergeben/ändern.
Außerdem kann es sein, dass du dein Applet signieren musst. Hab zwar schon öfters gelesen, dass es mit dem Sourceserver gehen sollte, habe aber noch keinen Weg gefunden, wie ein Applet  das hinbekommt. Wenn du das Applet z. B. rein in einen AppletViewer offline getestet hast, gibt es keine Security-Beschränkungen. Um das auszuschließen schaust du am besten in die Java Console.


----------



## JackHammer2xxl2 (14. Februar 2010)

Vielen dank für die Hinweise, wir sind Aktiv an einer Lösung am Arbeiten und berichten dann von den Ergebnissen.

Und noch mal kurz für mein Verständnis, ich bin davon ausgegangen das das Applet nur vom Browser Interpretiert wird ...also nicht runter geladen wird.
Zum anderem ist die Verbindung vorhanden auf dem Xampp und auch auf dem WebServer.

Ich mach das daran fest :
Ist die "Server.jar" nicht gestartet schlägt die Verbindung vom Applet fehl und das ganze Applet wird nicht auf der *.html seite angezeigt.

Läuft die Server.jar und das Applet Socket hat sich erfolgreich Verbunden gibt es den Text aus : Erfolgreich verbunden (Auf dem Applet JTextArea) da das auch passiert 
kann ich mir doch 100 % sicher sein das es verbunden ist und läuft.

Es kommen auch keine Exceptions, womit wir Arbeiten könnten und da es auch kein Symantischer Fehler sein kann bin ich hilflos.


----------



## Kai008 (14. Februar 2010)

Wenn du keine Exception bekommst, was genau läuft dann falsch?


----------



## JackHammer2xxl2 (16. Februar 2010)

Wir schaffen es einfach nicht HILFE  

die Verbindung steht via Socket nur die Kommunikation von Applet zu Server.jar 
writeUTF und readUTF

ich finde auch nichts im Netz.

Ne Lösung wäre uns auch was wert ...


----------



## SPiKEe (7. April 2010)

@Kai
das mit dem signieren stimmt schon .. aber nur wenn du zu anderen server außer dem soruce-server ne verbindung aufbauen willst ...
solange alles nur mittem source-server läuft ist alles ok ...

zum problem ...

wenn der socket erfolgreich aufgebaut wird ... dann kann der fehler eigentlich nur dahinter stecken ...
zum beispiel

die UTF-streams failen ... dann einfach mal mit printstream und bufferedreader zusammen basteln
im connection-thread läuft was falsch > code wär gut
in der server-haupt-class stimmt was beim accept der connections nicht ...

hier mal ein kleines beispiel das laufen sollte


server.java

```
import java.io.*;
import java.net.*;
public class server
{
	int PORT=4711;
	Vector<connection> v=new Vector<connection>(); //kann man auch anders machen ... aber ich schreibs grade dierekt hier ohne zu testen
	public static void main(String[] args) throws Exception
	{
		new server();
	}
	public server() throws Exception
	{
		ServerSocket ss=new ServerSocket(PORT);
		while(true)
		{
			Socket cs=ss.accept();
			connection c=new connection(this, cs);
			v.add(c);
		}
	}
	public void send(String l) throws Exception //möglich da normaler methoden aufruf aus connection.run()
	{
		for(int i=0; i<v.size(); i++)
		{
			v.elementAt(i).out.println(l); //sollte so gehen .. wenn nicht einfach out in connection public machen
		}
	}
}
```

connection.java

```
import java.io.*;
import java.net.*;
class connection extends Thread
{
	Socket cs=null;
	server ss=null;
	BufferedReader in=null;
	PrintStream out=null;
	public connection(server ss, Socket cs) //throws Exception ist hier nicht möglich da über new instanziert wird
	{
		try
		{
			this.ss=ss;
			this.cs=cs;
			this.in=new BufferedReader(new InputStreamReader(this.cs.getInputStream()));
			this.out=new PrintStream(this.cs.getOutputStream());
			this.start();
		}
		catch(Exception e) { }
	}
	public void run()
	{
		try
		{
			String l="";
			while(true)
			{
				l=in.readLine();
				if(!l.equals(""))
					ss.send(l);
			}
		}
		catch(Exception e) { }
	}
}
```

in deinem applet einfach die Data-Streams durch BufferedReader / PrintStream ersetzen und dann nur readLine / println drauf anwenden ... der rest kann so bleiben wie er ist *hoffe ich mal*


DIESER CODE WURDE NICHT GETESTET UND IST NACH http://java.seite.net/chat/quellcode.html PROGRAMMIERT
EVENTUELLE FEHLER MÜSSEN SELBST BERICHTIGT WERDEN

sollte soweit alles klappen und die nachrichten nun auch wieder bei den clienten ankommen so ist es wie oben erwähnt höchstwarscheinlich ein fehler mit den UTF-streams oder mit der broadcast-logik ...
hoffe ich konnt helfen

bei weiteren problemen einfach mal den kompletten source der page kopieren und testen *achtung ... es sollte auf die korrekte verwendung der streams geachtet werden ... da das beispiel veraltet und mitlerweile fehlerhaft ist *z.B. die streams durch BufferedReader / PrintStreams tauschen ... den Vector mit Typ nach Vector<T> deklarieren und initialisieren ... weitere vom compiler gemeldete warnungen*


----------

