Kleiner DSGSFTP-server mit Java funktioniert nicht :(

Hallo!

Also eine Freundin von mir muss das bis morgen für die Uni fertig bekommen. Das Problem ist ich kann kein Java und es öffnet den gewünschten File nicht :(

Vielleicht findet ja einer von euch den Fehler. Wär wirklich sehr dankbar...


FileReader:
Deklaration
public class FileReader
extends java.io.InputStreamReader

Beschreibung
Diese Klasse stellt einen Stream zur Verfügung, der eine Datei ausliest. Hierbei werden die gelesenen Bytes aus der Zeichencodierung der Plattform in Unicode-Zeichen umgesetzt. Zur Umcodierung wird die voreingestellte Zeichencodierung der Plattform verwendet. Wenn eine andere Codierung benutzt werden soll, muß ein Exemplar von InputStreamReader eingesetzt werden, das auf einem FileInputStream arbeitet.


Mfg, Solar


Code:
else if (inputLine.startsWith("GET"))
				{

					inputLine = in.readLine(); // lese nochmal von leitung ob nach geht was kommt - sollte Dateiname sein
					if(inputLine.equals("")) // wenn nach dem get nichts kommt  // if(inputLine.equals("") || inputLine.equals(" ")) 
					{
						// Ausgabe von Fehler Nr. 203
						out.println("203 You can't get a directory"); // ohne \n weil ein PrintLn Befehl
						//System.out.println("203 You can't get a directory"); // ohne \n weil ein PrintLn Befehl
					}
					else 
					{
						File dateiGet = new File("pub/" + inputLine);
						if (dateiGet.exists() == true)
						{
							// Datei oder Dir existiert
							if (dateiGet.isFile() == true)
							{
								// Es ist ein File
								// Zugriff?
								if (dateiGet.canRead() == true) // Wenn die angegebene Datei per GET nicht geholft werden darf - Access denied - Fehler Nr. 202
								{
									// darf zugreifen
									System.out.println("dateiname: " + inputLine);
									BufferedReader inGet = new BufferedReader(new FileReader("pub/" + inputLine)); 
									System.out.println("fehler beim öffnen.");
									String h = null; // hier oder wo anders
									h = inGet.readLine();
									while (h != null)
									{
										h = h.replaceAll("\\.","..");
										out.print(h);
										h = inGet.readLine() ;
									} 
									// Ende des Files erreicht:
									out.println("\n."); // --> entspricht \n.\n
									inGet.close(); // BuferedReader schließen
								}								
							}
							else
							{
								// es is ein Directory
								out.println("203 You can't get a directory");
							}
						}
						else
						{
							// Datei existiert NICHT
							out.println("201 Not found"); // ohne \n weil ein PrintLn Befehl
						}
					}
 
die fehlerbeschreibung ist etwas ungenau. an welcher stelle oeffnet er die datei nicht? in zeile 13 oder in zeile 25? etwas mehr code waere auch gut, am besten eine komplette datei die man kompilieren kann (was zugegebenermassen recht schwierig aus einem groesseren projekt zu extrahieren ist).
daran liegts wahrscheinlich nicht, aber falls zeile 13 funktioniert, warum wird das File objekt aus zeile 13 nicht in zeile 25 verwendet? also statt

Code:
BufferedReader inGet = new BufferedReader(new FileReader("pub/" + inputLine));
so
Code:
BufferedReader inGet = new BufferedReader(new FileReader(dateiGet));
 
So die Kollegin hat mir nun den gesammten Source geschickt... Siehe Anhang ;)

http://www.dslab.tuwien.ac.at/lab1/protocol.txt
da steht wie er sich verhalten soll mit entsprechenden client ...

Cheerz, Solar


UPDATE:
hab jetzt im telnet getestet
---> ein get filename (wenn file vorhanden) geht jetzt ...
--> aber get file das gesperrt ist --- fängt er sich auf
 
nehme alles zurueck und behaupte das gegenteil. hab gerade erst in das protokolldokument geschaut und festgestellt, dass das gar kein webserver werden soll.

tut mir leid, aber bei mir funktioniert der code so wie er ist. ich wuerde zwar, wie oben gesagt, die datei nicht zwei mal oeffnen, aber das ist nicht das problem. allerdings verhaelt sich der server nicht genau protokollkonform, da in zeile 227 steht:

Code:
out.print("\n."); // --> entspricht \n.\n
was nicht stimmt. stattdessen muss da ein println() stehen. also:

Code:
out.println("\n."); // --> entspricht \n.\n

das hat allerdings nichts mit dem oeffnen der datei zu tun. warum das nicht funktioniert weiss ich nicht, bei mir gehts wie gesagt. keine ahnung ob dir das jetzt besonders weiter hilft...
 
Hab das auch grad entdeckt :D Habs auch gleich ausgebessert. SRY :(

Aber naja, ist ja nicht mein Projekt drum hab ichs nicht gewusst ^^


@Dude: Ja mal sehen ob wirs hinbekommen. Habs mal der Freundin weitergeleitet :) Danke nochmals für deine Bemühungen!


C&P von der Freundin:
Trinity (03:06 AM) :
das println udn print aht untershciede ...
eins davon is die 1 byte vatiante die ander die 2
Trinity (03:07 AM) :
alsi es isein untershcied zwischen:
out.println("\n.");
oder out.print("\n.\n");
Trinity (03:07 AM) :
posten bitte
Trinity (03:08 AM) :
UND ...
Trinity (03:08 AM) :
kannst du den typen WOMIT das öfnne bei ihm geht ...
Trinity (03:08 AM) :
im telnet geht es
Trinity (03:08 AM) :
aber der abgabe-robot nimmt es net
Trinity (03:08 AM) :
warum auhc immer
Trinity (03:10 AM) :
get /filename.txt
03:09:44 Trinity: geht noch imerm net
 
Original von sto
C&P von der Freundin:
Trinity (03:06 AM) :
das println udn print aht untershciede ...
eins davon is die 1 byte vatiante die ander die 2
Trinity (03:07 AM) :
alsi es isein untershcied zwischen:
out.println("\n.");
oder out.print("\n.\n");

wusste ich nicht. hab die doku nicht gelesen eben und es ist schon laenger her, dass ich java programmiert hab. dann muss es wohl out.print("\n.\n"); heissen...

Trinity (03:08 AM) :
aber der abgabe-robot nimmt es net

gibts den source von besagtem robot? paketsniffer anmachen, per telnet request schicken, roboter starten, vergleichen.

Trinity (03:10 AM) :
get /filename.txt
03:09:44 Trinity: geht noch imerm net

laut dem protokoll muss da auch ein newline zwischen get und /filename.txt. vielleicht implementiert der roboter das protokoll falsch? ich bin noch n moment im habo irc kanal und im kanal #c++. wollte aber eigentlich jetzt pennen. also wenn jemand auftaucht nachdem ich den post abgeschickt hab und bevor ich mein paper, was ich gerade geschrieben hab, gemailt hab koennen wir vielleicht im irc noch weiter dran rumschrauben.
 
Zurück
Oben