Socket geht auf Windows, aber auf Mac nicht ?

  • Themenstarter Themenstarter NikoGG
  • Beginndatum Beginndatum
N

NikoGG

Gast
Hallo zusammen,

ich habe ein Problem. Und zwar beschäftige ich mich grade mit Netzwerk Programmierung in Java, und habe auch schon funktionierende Server/client programme mit Socket und ServerSocket gebaut. Allerdings macht mir ein kleines Testprogramm grade zu schaffen. Ich habe die ganze Zeit, auf meinem Macbook mit Mac OS X Lion versucht eine Verbindung zu meinem FTP Server aufzubauen, aber egal, was ich angestellt habe , ich bin nie über die "220 Speak friend, and enter" hinausgekommen.

Dann habe ich den gleichen Quellcode 1 zu 1 auf meinen Windows Pc übertragen und siehe da: Es funktioniert alles so wie es soll. Ich kann ganz normal einen Dialog mit dem FTP Server führen.
Da ich aber normal alle aufm Laptop programmiere ist das natürlich ziemlich ungünstig. Bin mit meinem Latein am Ende.

Kann mir jemand helfen oder weiss jemand warum dieser doch sehr simple Code auf Windows 7 normal läuft, aber auf Mac OS X nicht über die Begrüssung des Servers hinaus geht?

Java:
public static void main(String[] args){
		
		
		BufferedReader re = null;
		PrintStream send = null;
		Socket server = null;
		try {
			
			
			server = new Socket("ftp.*******.de" , 21);
			System.out.println("Verbindung steht");
			
			
			re = new BufferedReader(new InputStreamReader(server.getInputStream()));
			System.out.println("InputStream ok");
			
			
			send = new PrintStream(server.getOutputStream() ,false);
			System.out.println("OutputStream ok");
			
			
			System.out.println(re.readLine());
			
			
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		try {

			send.println("USER ***********");
			send.println("PASS **********");
			System.out.println(re.readLine());

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}
 
Die Zeilenumbrüche sind das Problem. Afaik erwartet der FTP Server als Zeilenumbruch \r\n so wie es unter Windows verwendet wird. Da aber auf dem Mac nur \r als Zeilenumbruch genutzt wird und die Methode PrintWriter.println immer den Betriebssystem spezifischen Umbruch nutzt erkennt der FTP Server die Befehle nicht mehr richtig. Versuch einfach mal den Zeilenumbruch für das Ende der Behlszeilen selbst zu senden statt das println zu überlassen.

Java:
send.print("USER ***********\r\n");
send.print("PASS **********\r\n");
 
Danke, jetzt gehts 🙂 , hatte nicht dran gedacht, dass auch der Server nen Line seperator braucht um die Befehle zu unterteilen 🙂

Mfg Niko
 

Neue Themen


Zurück
Oben