TCP Server/Client

Fohnbit

Top Contributor
Hallo Gemeinde

Ihr würdet mir sehr helfen, wenn ihr mir einen Link oder einen Code hier posten könntet, welcher eine TCP Server/Client Kommunikation erstellt.
Ich habe zwar einen am Laufen aber das klappt nicht richtig. Daher ein Neuanfang.
Meine private Anforderung wäre:
Es gibt ein IP Geräte, welch eine TCP Verbindung bereit stellt. Sagen wir Telnet.

Nun möchte ich aus Java mit dem Gerät per TCP verbinden, und die Verbindung aufrecht halten.
Bei Abbruch der Verbindung (Time-Out ca. 30 sek) soll versucht werden neu zu verbinden.

Ich muss vom dem Gerät Daten empfangen aber auch senden können.

Hat hier jemand ein schönes Beispiel um den Start oder vielleicht das Ziel erreichen zu erfüllen?

Dank euch!
 
M

Marcinek

Gast
Google: Simple TCP Client Server java

Google: Simple TCP Chat java

Google: Simple TCP Example java

Google: How to: TCP Connection java
 

Fohnbit

Top Contributor
Hallo

Danke, die Links hatte ich auch schon gefunden, jedoch brachten die mich nicht an mein Ziel.
Mein Problem ist vor allem das sowohl senden als auch Empfangen über die selbe aufgebaute Verbindung erfolgen, gehalten und im Falle eines Abbruches neu aufgebaut werden soll.

Für Hilfe wäre ich also sehr dankbar!
 
M

Marcinek

Gast
:bahnhof:

Ja, dann zeig mal deinen Code, weil jede Socketverbindung bidirektionalen Datenaustausch erlaubt, weiß ich nicht gerade, wo das Problem liegen soll.

Hast du eventuell eine konkrete Frage zu einem Beispiel?
 

Fohnbit

Top Contributor
Hallo

Gerne, dann bauen wir weiter wo ich aufgehört habe:

Die Client/Server Klasse:

Java:
import java.net.*;
import java.io.*;

public class Listener extends Thread

{    
	
    public Listener(TCPServerClient SC) {
        this.SC = SC;
       }
	private TCPServerClient SC;

	String answer;
	
		public void run() {
			
		try {
			SC.outToServer.writeBytes("listen 1\n");
			answer = SC.inFromServer.readLine();
			SC.outToServer.writeBytes("00:04:20:07:3a:b7 status\n");
			 answer = SC.inFromServer.readLine();
	    	  SC.setAnswer(answer);
			
			 while(SC.clientSocket.isConnected()){
		    	  answer = SC.inFromServer.readLine();
		    	  SC.setAnswer(answer);
			 }
			 
			 SC.inFromServer.close();
			 SC.setAnswer("Thread beendet");
				
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}

Im Hauptprogramm wird wie folgt aufgerufen:
Java:
public class TCPServerClient {

	public Socket clientSocket;
	public DataOutputStream outToServer;
	public BufferedReader inFromServer;
	private Thread listen;

	public synchronized void setAnswer(String answer) throws UnsupportedEncodingException {
		
		if(answer.compareTo("Thread beendet")==0){
			reconnect();
			return;
... und so weiter
		}

Verbindung beenden:
Java:
private void disconnect(){
		 try {
			 timer.cancel();
			 clientSocket.close();
			 listen = null;	
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

Verbindung herstellen:
Java:
private void connect(){
		timer.cancel();
 	try {
    		String IP = get("serverip");
    		int Port = getInt("port",9090);
    		clientSocket = new Socket(IP,Port );
	    	outToServer = new DataOutputStream(clientSocket.getOutputStream());
			inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			reconnect();
			return;
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			reconnect();
			return;
		}
	if(clientSocket.isConnected()){
		if(listen == null){
			listen = new Listener(this);
			listen.start();				
		} else {
			reconnect();
		}
			
	}

}
	private void reconnect(){
		
		if(get("autostart").compareTo("Automatic")==0){
			try {
				timer = new Timer();
				timer.schedule(new TimerTask() {
			        public void run() {
			              	connect(); 
			              }
			    }, delay*1000);
			} catch(Exception e){
				
			}
				
			
		}
			
	
	}

Befehle senden:
Java:
public void sendCommand(String data) {
    try {
       	  outToServer.writeBytes(data);
              }
    catch(Exception e) {
       ;
    }
 }
 
Zuletzt bearbeitet:

Fohnbit

Top Contributor
Mein Problem ist nun, dass mein Code es nicht bemerkt, wenn der Ziel TCP Server weg ist.
Er bemerkt also den Verbindungsabbruch nicht!

Sofern ich das eruiert habe, hängt er beim readLine:
Java:
while(SC.clientSocket.isConnected()){
		    	  answer = SC.inFromServer.readLine();
		    	  SC.setAnswer(answer);
			 }

Wie der Code also arbeiten soll:
Er soll eine Verbindung aufbauen, diese halten und bei einem Abbruch einen Reconnect versuchen.
Er soll Daten an den TCP Server senden und beim Empfang die ".setAnswer" im Hauptprogramm starten.

Ich bin mir auch nicht sicher, ob der Verbindungsaufbau und ggf. reconnect wirklich gut programmiert ist :autsch:

Wäre toll wenn sich jemand an der Optimierung beteiligen könnte!

Danke!
 

Fohnbit

Top Contributor
Habe ich fast vergessen.

Das .readLine() macht mir auch noch andere Probleme Denn wenn der String nicht mit einem Carriage Return abgeschlossen ist, wartet ReadLine().
Ich bräuchte einen TimeOut in Millisekunden ... also wenn 200 Millisekunden lang keine Daten kommen, dann soll ausgegeben werden.

Danke!
 
T

tuxedo

Gast
Zum Thema "Erkennen dass die Verbindung tot ist":

Das einzig zuverlässige ist, die Verbindung regelmäßig zu benutzen um zu sehen ob noch kommuniziert werden kann oder nicht. Selbst mit eingschaltetem "TCP KeepAlive" kann es lange (bis zu Stunden??) dauern bis eine unterbrochene Verbinudng als unterbrochen erkannt wird. Ein paar weitere Details dazu: socket : Java Glossary

Wenn du eine unterbrochene Verbindung binnen sekunden (oder darunter) erkennen können willst, musst du das also auf Protokollebene selbst implementieren.
 

Fohnbit

Top Contributor
Hallo tuxedo

Danke für die Info.
Protokollebene: Hört sich kompliziert an. Aber merkwürdig das sonst keiner braucht.

Was wäre wenn ein eigener Thread jede 5 Sekunden prüft ob die Verbindung noch steht?

TCP ist ja ein verbindungs orientiertes Protokoll. Dachte immer das ein Abbruch durch das Übertragngsprotokoll selbst erkannt wird.

Ein Codebeispiel hast du nicht, oder?

Danke!
 

Fohnbit

Top Contributor
Hallo

ich habe nun etwas getestet.
Wenn ich auf der Server Seite die Connection schließe, erhalte ich beim debugen eine Meldung.
Leider kann ich mit dieser nichts anfangen.

Weiß jemand ob ich die Meldung abfangen kann? Denn dann habe ich den Verbindungsabbruch den ich suche:
 

Anhänge

  • Java.JPG
    Java.JPG
    49,8 KB · Aufrufe: 35

Fohnbit

Top Contributor
Hallo

Das wäre ja genau das was ich bräuchte, um einen Abbruch zu erkennen. Aber dann habe ich den Try catch Block falsch, oder?:
Java:
public void run()  {
		try {
			while(SC.clientSocket.isConnected()){
		    	  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(SC.clientSocket.getInputStream()));
		    	      
		    	  char[] buffer = new char[200];
		    	  int anzahlZeichen = bufferedReader.read(buffer, 0, 200);
		    	  tmpNachricht = new String(buffer, 0, anzahlZeichen);
		    	     		    	      
		    	      if(tmpNachricht != null | tmpNachricht.length() > 0){
		    	    	   Nachricht = tmpNachricht + Nachricht; 
		    	    	   if(timer != null){
		    	    		   timer.cancel();
		    	    	   }
		    	    	   
		    	    	timer = new Timer();
		   				timer.schedule(new TimerTask() {
		   			        public void run() {
		   			            // Task here ...
		   			     	try {
								SC.setAnswer(Nachricht);
								Nachricht = ""; 
							} catch (UnsupportedEncodingException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							              }
		   			    }, delay);
		    	      }   
		    	    	    	    
			 }		 
			 SC.inFromServer.close();
			 SC.setAnswer("Thread beendet");
				
			 
			 
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
			 try {
				SC.setAnswer("Thread beendet");
			} catch (UnsupportedEncodingException e1) {
				// TODO Auto-generated catch block
				// e1.printStackTrace();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
			 try {
				SC.setAnswer("Thread beendet");
			} catch (UnsupportedEncodingException e1) {
				// TODO Auto-generated catch block
				// e1.printStackTrace();
			}
		}
	}

Oder wie sollte man den Fehler abfangen?

Danke!
 
M

Marcinek

Gast
Ja sollte korrekt sein.

Lass mal das e.printStacktrace stehen und setzte da ein Brechpunkt rein, dann siehst du, was passiert.
 

Fohnbit

Top Contributor
Hallo

Habe alle .printStackTrace stehen gelassen und bei allen einen Breakpoint eingefügt.

Ergebnis das gleiche. Bekomme den Fehler im Editor und kein Breakpoint greift.
 
M

Marcinek

Gast
Er möchte in String etwas debuggen,w eil dort eine Exception auftritt frage ist warum, das kann man nicht sehen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
K C# Server - Android Client Netzwerkprogrammierung 0
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
E Thematik Client server Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
J Client Server - Serialisierung Netzwerkprogrammierung 8
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
K Client => Server Netzwerkprogrammierung 2
A ? Home-Network, Server/Client-Einrichtung Netzwerkprogrammierung 4
S Socket Server: ConnectionError vom Client erkennen Netzwerkprogrammierung 31
A Java Server - IOS Client Applikation Netzwerkprogrammierung 20
L Ratschlag zur Umsetzung einer client-server-Kommunikation Netzwerkprogrammierung 6
M RMI RMI Probleme zwischen Client und Server Netzwerkprogrammierung 5
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
N Client-Server-Datenbank Netzwerkprogrammierung 13
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
B Client/Server Connection Problem Netzwerkprogrammierung 2
S Server Client Daten hin und herschicken Netzwerkprogrammierung 2
R Server zu Client Kommunikation Netzwerkprogrammierung 11
D TCP Verbindung (Java Client und Visual Basic Server) Netzwerkprogrammierung 12
S Socket Applet Client bekommt keine GLOBALE Verbindung zum Server Netzwerkprogrammierung 25
T Server und Client verbinden nicht Netzwerkprogrammierung 6
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
V Socket UDP Server/Client Kommunikation sehr langsam Netzwerkprogrammierung 2
das-mo Client/Server sendet nicht Netzwerkprogrammierung 7
Z Socket Server/Client vernünftiger Verbindungsabbruch Netzwerkprogrammierung 4
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
N eine klasse mit server & client Netzwerkprogrammierung 5
D RMI Gui auf client updaten basierend auf den Property Änderung des Models auf dem Server ohne polling Netzwerkprogrammierung 12
T Socket Client versucht zyklische Verbindung zum Server Netzwerkprogrammierung 4
S Socket Einfache Client/Server-Anwendung Netzwerkprogrammierung 11
F Socket Server/Client Kommunikation Netzwerkprogrammierung 4
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
D Projektstruktur / Architektur (Client-Server) Netzwerkprogrammierung 9
P Socket IRC Client nicht kompatibel mit Server Netzwerkprogrammierung 30
F FTP Client mit Sockets - wann sagt der Server nichts mehr? Netzwerkprogrammierung 7
B RMI Server - Client - Aufteilung/Prinzip Netzwerkprogrammierung 11
N Server Client TCP IP Netzwerkprogrammierung 3
M Übersicht client/server implementationen und Frameworks (mithilfe gesucht!) Netzwerkprogrammierung 6
J ObjectStream Client/Server Netzwerkprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben