TelnetClient Java

smathedark

Mitglied
Hallo,

ich versuche zur Zeit einen kleinen primitiven TelnetClient in Java zu realisieren.
Hierbei stoße ich auf ein Problem, bei dem ich nicht weiss wie ich es umgehen kann.
Ich möchte das mein Client merkt, wenn die Verbindung zum Telnetpartner abbricht. Leider sind aber alle read methoden, die ich auf dem Inputstream ausführe blockierend, sprich das programm steht wenn die Gegenstelle weg ist.
Ich würde gerne etwas wie ein Linepolling realisieren, womit ich bevor ich das Read ausführe prüfen kann, ob die Gegenseite noch da ist. Dieses polling muss aber ohne Readmethode auskommen da diese ja blockiert. Ich weiss einfach nicht wie ich das hinbekommen soll.
Für eure Hilfe wäre ich sehr dankbar.
 
Ich weiß jetzt zwar nicht, wie du das ganze realisierst.
Aber wenn du über Streams gehst, müsstest du doch über die entsprechenden Methoden überprüfen können, ob die Verbindung noch besteht.
Wenn die Gegenseite das Socket schließt, müsstest du das doch mitkriegen!?
 
Hallo,

schau mal hier:
Server:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.concurrent.TimeUnit;

/**
 * @author Thomas.Darimont
 * 
 */
public class Server {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Socket socket = new ServerSocket(23).accept();
        Scanner scanner = new Scanner(socket.getInputStream());
        PrintWriter outputPrintWriter = new PrintWriter(socket
                .getOutputStream());

        int i = 0;

        while (i++ < 1000) {
            outputPrintWriter.println(System.currentTimeMillis());
            outputPrintWriter.flush();
            TimeUnit.SECONDS.sleep(1);
        }

        scanner.close();
        socket.close();

    }

}

Client:
Java:
package de.tutorials;

import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws Exception {
        Socket socket = new Socket("localhost", 23);
        Scanner scanner = new Scanner(socket.getInputStream());

        while (scanner.hasNextLine()) {
            System.out.println("Received: " + scanner.nextLine());
        }

        scanner.close();
        socket.close();

    }
}

Ansonsten schau mal hier:
http://www.tutorials.de/forum/java/246985-socket-schliessen.html

Gruß Tom
 
Hallo,

also erstmal vielen Dank für eure schnellen Antworten.
Die Methode mit den SocketChannel funktioniert ganz gut.
Da ich dadurch aber die vorher von mir verwendete Bibliothek nichtmehr verwenden kann, habe ich nun ein anderes Problem bekommen.
Wie kann ich bei einer solchen Verbindung über SocketChannel die Echooptionen der Telnetverbindung setzen?

Vielen Dank.
 
Zurück