Telnet mit Java auf Unix Rechnern

Ich habe ein Telnetroutine für Java gefunden. Diese
funktioniert auch mit Linuxsystemen. Wenn ich mich
aber auf einem Unix server versuch draufzuklinken, dann
bekomme ich 2 kryptische Zeichen und das war es dann.
Mit dem Windows Telnet komme ich drauf???

Hat jemand eine Idee, woran dies liegen kann!!!

Vielen Dank für jede Antwort
Manfred

Ich habe ein Telnetroutine für Java gefunden. Diese
funktioniert auch mit Linuxsystemen. Wenn ich mich
aber auf einem Unix server versuch draufzuklinken, dann
bekomme ich 2 kryptische Zeichen und das war es dann.
Mit dem Windows Telnet komme ich drauf???

Hat jemand eine Idee, woran dies liegen kann!!!

ich hab sogar 3:

  1. Java macht string-conversion ("ISO-Latin Ascii etc…) in verschieden Stream’s. Das haut meistens hin, aber nicht immer. Der telnet von windows machts immer.

  2. Es gibt verschiede Protokole für telnet. So kann der Unix-server z.b. versuchen ein X-fenster aufzubauen, was die routine unter Umständen nicht versteht.

  3. Der Unix-server macht keinen „flush“ wenn er fertig mit der Ausgabe ist. Java brings dann fertig in den Streams komplette Seiten zwischenzuspeichern ohne was auszugeben.

viel Spass beim raten, der Quell-code wär hilfreich.

cu

Anbei füge ich den Quellcode mit ein!! Diesen habe ich aus
dem Buch Go to Java 2. Wie schon gesagt mit Linux klappts. Aber
eben mit jeder Unixkiste. Streik das teil!!!

Vielen Vielen Dank für jede Anregung
Grüße
Manfred

import java.net.*;
import java.io.*;

public class EchoClient
{
public static void main(String[] args)
{
if (args.length != 1) {
System.err.println("Usage: java EchoClient ");
System.exit(1);
}
try {
Socket sock = new Socket(args[0], 23);
InputStream in = sock.getInputStream();
OutputStream out = sock.getOutputStream();
//Timeout setzen
sock.setSoTimeout(300);
//Ausgabethread erzeugen
OutputThread th = new OutputThread(in);
th.start();
//Schleife für Benutzereingaben
BufferedReader conin = new BufferedReader(
new InputStreamReader(System.in));
String line = „“;
while (true) {
//Eingabezeile lesen
line = conin.readLine();
if (line.equalsIgnoreCase(„QUIT“)) {
break;
}
//Eingabezeile an ECHO-Server schicken
out.write(line.getBytes());
out.write(’\r’);
out.write(’\n’);
//Ausgabe abwarten
th.yield();
}
//Programm beenden
System.out.println(„terminating output thread…“);
th.requestStop();
th.yield();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
in.close();
out.close();
sock.close();
} catch (IOException e) {
System.err.println(e.toString());
System.exit(1);
}
}
}

class OutputThread
extends Thread
{
InputStream in;
boolean stoprequested;

public OutputThread(InputStream in)
{
super();
this.in = in;
stoprequested = false;
}

public synchronized void requestStop()
{
stoprequested = true;
}

public void run()
{
int len;
byte[] b = new byte[100];
try {
while (!stoprequested) {
try {
if ((len = in.read(b)) == -1) {
break;
}
System.out.write(b, 0, len);
} catch (InterruptedIOException e) {
//nochmal versuchen
}
}
} catch (IOException e) {
System.err.println("OutputThread: " + e.toString());
}
}
}

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

public class EchoClient
{
public static void main(String[] args)
{

try {
Socket sock = new Socket(args[0], 23);

Diese Zeile gefällt mir gar nicht:

InputStream in = sock.getInputStream();

besser wär wahrscheinlich:

BufferedReader in = new BufferedReader(new InputStreamReader(in));

dadurch änden sich allerdings auch die lese-commmandos im Thread.

und die Zeichenkonvertierung wird besser.

Was dann einen von 3 möglichen Fehler ausschliesst.

//Timeout setzen

HÖHER:

sock.setSoTimeout(30000);
//Ausgabethread erzeugen

} catch (IOException e) {
System.err.println(e.toString());

Falsch :

System.halt(1);
}

cu

Danke für Ihre Hilfe. Aber leider ohne Erfolg.
Wie vorher auch, auf Linux und Win200 komme ich problemlos drauf aber auf Unix geht es nicht. ???

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]