Kommunikation mit externem Programm über TCP

1337iceskater

Aktives Mitglied
Hallo Freunde der Java-Programmierung,

ich hab n Problem. Zur Situation: ich habe ein Projekt meines Vorgängers übernommen. Dabei muss ich eine Kommunikation zwischen einem externen Programm und einer Java-App herstellen. Er wollte das damals über TCP machen und hat auch shcon Klassen dafür geschrieben, die ich euch jetzt mal zeigen möchte:

ClientKlasse:
Java:
import java.io.*;

import java.net.*;

import java.lang.Thread;





/**

 * @author MiDaAI07

 *

 */

public class Client extends Thread

{

	private Socket  clientSocket = null;

	private PrintWriter out = null;	

	private BufferedReader in = null;

	private String serverIP = "";

	private int port = 4444;

	

	public static final String	MOVE_COMMAND		= "MOVE";

	public static final String	HOR_COMMAND			= "H";

	public static final String	VER_COMMAND			= "V";

	public static final String	COMMAND_SEPARATOR	= ",";

	public static final String	SELECT_COMMAND		= "SELECT";

	

	private String command ="";

	private int xPos;

	private int yPos;

	private String firstDir ="";

	private int deltaHor;

	private int deltaVer;

	

	

	/**

	 * This method parses the message and performs GameField.doMove method.

	 * @param message

	 */

	private void parseMessage(String message)

	{

		String[] splittedCommand = message.split(COMMAND_SEPARATOR);

		

		command = splittedCommand[0];

		

		if(command.startsWith(MOVE_COMMAND))

		{

			xPos = Integer.valueOf(splittedCommand[1]);

			yPos = Integer.valueOf(splittedCommand[2]);

			firstDir = splittedCommand[3];

			deltaHor = Integer.valueOf(splittedCommand[4]);

			deltaVer = Integer.valueOf(splittedCommand[5]);

			boolean startVertical = firstDir.startsWith(VER_COMMAND);

			int newX = xPos + deltaHor;

			int newY = yPos + deltaVer;

			

			//GameField.doMove(xPos,yPos,newX,newY,startVertical)

		}

		else if(command.startsWith(SELECT_COMMAND))

		{

			xPos = Integer.valueOf(splittedCommand[1]);

			yPos = Integer.valueOf(splittedCommand[2]);

			//GameField.setSelected(xPos,xPos);

		}

		

	}

	

	public boolean isLocal()

	{

		String ip = clientSocket.getInetAddress().toString();

		return ip.startsWith("/127.0.0.");

	}

	

	/**

	 * Send a Message to Server

	 * @param command

	 */

	public boolean send(String command)

	{

		for(int i=0;i<10;i++)

		{

		try {

			out.println(command);

			return true;

		} catch (RuntimeException e) 

		{

			try {

				Thread.sleep(500);

			} catch (InterruptedException e1) {

				// TODO Auto-generated catch block

			}

			e.printStackTrace();

		}

		}

		return false;

		

	}



	/**

	 * Connect to Server

	 */

	public void connect()

	{

		start();

	}

	

	/**

	 * Konstruktor, der den Client als Thread aufruft.

	 * Dieses Object repr�sentiert das Client-seitige Ende der Verbindung zwischen Client und Server.

	 */

	public Client(/*KomSchnittstelle kom,*/ String ip, int port) 

	{

		this.serverIP = ip;

		this.port = port;

	}



	/**

	 * 

	 */

	public void run()

	{

		

		try 

		{

			clientSocket = new Socket(serverIP,port);

			out = new PrintWriter(clientSocket.getOutputStream(),true);

			in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

					

			while(true && !isInterrupted() )

			{

				System.out.println(in.readLine());

			}

			



		} 

		catch (UnknownHostException e) {e.printStackTrace();} 

		catch (IOException e) {e.printStackTrace();}

		

		



	}

}

ServerKlasse:
Java:
import java.io.*;

import java.net.*;

import java.lang.Thread;



/**

 * 

 */



/**

 * @author MiDaAI07

 *

 */

public class Server extends Thread 

{

	private Socket clientSocket = null;

	private PrintWriter out = null;	

	private BufferedReader in = null;

	private int port = 4444;

	

	public static final String	MOVE_COMMAND		= "MOVE";

	public static final String	HOR_COMMAND			= "H";

	public static final String	VER_COMMAND			= "V";

	public static final String	COMMAND_SEPARATOR	= ",";

	public static final String	SELECT_COMMAND		= "SELECT";

	

	/**

	 * Send a Message to Client

	 * @param command

	 */

	public boolean send(String command)

	{

		for(int i=0;i<10;i++)

		{

		try {

			this.out.println(command);

			return true;

		} catch (RuntimeException e) 

		{

			try {

				Thread.sleep(500);

			} catch (InterruptedException e1) {

				// TODO Auto-generated catch block

			}

			e.printStackTrace();

		}

		}

		return false;

		

	}

	

	

	/**

	 * Start Server

	 */

	public void startServer()

	{

		start();

	}

	

	

	/**

	 * Konstruktor, der den Server als thread aufruft.

	 * Dieses Object repr�sentiert das Server-seitige Ende der Verbindung zwischen Client und Server.

	 */

	public Server(/*KomSchnittstelle kom,*/int port) 

	{

		this.port = port;

	}



	/**

	 * 

	 */

	public void run()

	{

		ServerSocket serverSocket = null;

		int serverSocketPort = port;

		
		

		try 

		{

			serverSocket = new ServerSocket(serverSocketPort);

			clientSocket = serverSocket.accept();

			this.out = new PrintWriter(clientSocket.getOutputStream(),true);

			in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

			

			while(true)

			{

				System.out.println(in.readLine());

			}



		}

		catch (IOException e) {

			// TODO Auto-generated catch block

			System.err.print("");

			e.printStackTrace();

		}


	}

}

Jetzt zu meinem Problem: Die Kommunikation läuft indem man entweder den Client in der Java-App und den Server in der externen App definiert oder umgedreht. Das soll dabei wohl keine Rolle spielen. Ist die externe App der Client, kommt bei dem Aufruf der Send-Methode im Server eine NullPointer-Exception, da angeblich der outputstream = null sei. Wenn die externe App Server ist, kommt beim Aufruf der Send-Methode im Client ein Output in Eclipse, der unendlich lange "null" ausgibt. Jedes "null" hat dabei eine eigene Zeile.

Leider kenne ich mich mit Netzwerkprogrammierung noch nicht so gut aus, daher hab ich leider auch keine Idee woran es liegen könnte. Wenn man allerdings sowohl Client als auch Server in einer Java-App definiert, läuft das ganze einwandfrei.

Ich hoffe ihr könnt mir helfen.

LG Stefan
 

Atze

Top Contributor
es kann sein (nehmen wir an, du startest den server und den client in einer main-methode einer testklasse), dass der server läuft, du den client mit connect() startest und dann send(...) aufrufst, ohne das der thread aber läuft, wodurch das objekt zwar existiert, aber dein "out" noch nicht initialisiert ist! nur weil der client start vor dem send(...) im der main steht heißt es nicht, dass der client thread läuft wenn du send(...) aufrufst, denn wann ein thread startet bestimmt das drunterliegende os! die main kann da schneller sein. entweder du wartest beim senden ein wenig, oder du überprüfst, ob der client wirklich schon läuft.

über diese connect() und startServer() methoden würde ich mir vielleicht auch nochmal gedanken machen, die rufen ja eh nur die start() auf, die ja eh schon public sind. es sein den, du willst vor dem starten noch irgendwas machen.
 

1337iceskater

Aktives Mitglied
Hallo und danke für die schnelle Antwort!

Jetzt aber ein weiteres Problem: das starten des Threads ist sicherlich schon ausgeführt, da ich die send-methode selber durch nen JButton aufrufe. Weiterhin ist die externe App keine Java-App. Könnte es sein, dass das Problem daran liegt? Ich dachte, dass TCP Programmiersprachen unabhängig wäre.

Ich hoffe das lüftet Fragen.

LG Stefan
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
G Socket Socket Kommunikation Netzwerkprogrammierung 1
R Kommunikation zwischen Shell und Putty Netzwerkprogrammierung 5
temi (Netzwerk-) Kommunikation zwischen Anwendungen. Wie? Netzwerkprogrammierung 5
T Client zu Client Kommunikation Netzwerkprogrammierung 2
K Socket Nur bestimmte Zeichen als Kommunikation zulassen Netzwerkprogrammierung 1
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
H Android - PC kommunikation Netzwerkprogrammierung 3
S Server Kommunikation Netzwerkprogrammierung 1
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
I Socket Kommunikation C / Java Netzwerkprogrammierung 2
M Kommunikation übers Internet Netzwerkprogrammierung 9
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
Shams Anfängerfrage zu Server-Socket-Kommunikation Netzwerkprogrammierung 2
S Socket Kommunikation über Internet Netzwerkprogrammierung 1
M Socket Verschlüsselte Kommunikation - Fehler Netzwerkprogrammierung 1
I Interne Computer Kommunikation Netzwerkprogrammierung 6
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
L Ratschlag zur Umsetzung einer client-server-Kommunikation Netzwerkprogrammierung 6
R Server zu Client Kommunikation Netzwerkprogrammierung 11
V Socket UDP Server/Client Kommunikation sehr langsam Netzwerkprogrammierung 2
Y HTTP Google Reader API Kommunikation Netzwerkprogrammierung 3
C Socket Kommunikation mit SMTP-Server Netzwerkprogrammierung 4
J Kommunikation von Webanwendungen (auf Tomcat Server) untereinander Netzwerkprogrammierung 8
H Kommunikation Netzwerkprogrammierung 8
F Socket Server/Client Kommunikation Netzwerkprogrammierung 4
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
E Zeitgleiche Kommunikation, mögliche Ansätze Netzwerkprogrammierung 17
1 Java to Android TCP Kommunikation Netzwerkprogrammierung 2
O php - applet Kommunikation Netzwerkprogrammierung 9
D HTTP Java HTTP Kommunikation Netzwerkprogrammierung 9
1 SSH-Kommunikation - Ende eines Streams nicht erkenntlich Netzwerkprogrammierung 2
R Kommunikation TCP + UDP Netzwerkprogrammierung 3
S RMI RMI-Applet kommunikation funktioniert nicht Netzwerkprogrammierung 8
D Server-Client (Web) Kommunikation Netzwerkprogrammierung 9
E Client-Server-Kommunikation Netzwerkprogrammierung 13
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
DamienX Socket Asnchrone Kommunikation Netzwerkprogrammierung 5
Raidri Rückwertige RMI Kommunikation Netzwerkprogrammierung 6
S TCP/IP-Kommunikation ist zu langsam Netzwerkprogrammierung 13
M Kommunikation zwischen ServerSocket und Socket Netzwerkprogrammierung 2
G Datagram-Sockets für UDP-Kommunikation Netzwerkprogrammierung 2
G java asynchrone kommunikation Netzwerkprogrammierung 8
B Rmi Kommunikation Server zu mehreren Clients? Netzwerkprogrammierung 3
G Problem mit Client-Server Kommunikation Netzwerkprogrammierung 4
N Servlet-RMI Kommunikation Netzwerkprogrammierung 8
G Objecte für Kommunikation nutzen Netzwerkprogrammierung 2
L http kommunikation mit und ohne multipart Netzwerkprogrammierung 4
D Einfache Applet-Servlet-Kommunikation Netzwerkprogrammierung 5
G unvollständige Daten: Http Client-Server-Kommunikation Netzwerkprogrammierung 2
RaoulDuke RMI Kommunikation Java <-> Perl Netzwerkprogrammierung 7
M Servlet - Applet Kommunikation Netzwerkprogrammierung 3
S Kommunikation zweier Java-Programme Netzwerkprogrammierung 6
J client/server kommunikation Netzwerkprogrammierung 3
T Kommunikation auf Byte-Ebene zw. C und Java via Socket Netzwerkprogrammierung 12
M Client-Kommunikation ohne Server Netzwerkprogrammierung 7
S Kommunikation Fortran <-> Java auf Client-Server-Archi Netzwerkprogrammierung 2
J Kommunikation zw. Server und mehreren Clints haut nicht hin Netzwerkprogrammierung 2
K Socket Kommunikation Netzwerkprogrammierung 3
K Applet - Servlet Kommunikation ohne Sockets Netzwerkprogrammierung 5
R applet servlet kommunikation Netzwerkprogrammierung 2
G JINI über RMI // Client-Server Kommunikation Netzwerkprogrammierung 4
D Kommunikation zwischen mehreren Servlets??? Netzwerkprogrammierung 3
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
Aruetiise Socket Java Programm auf Server Netzwerkprogrammierung 3
G Programm unter anderer IP ausführen Netzwerkprogrammierung 6
T Socket Java Programm hängt sich auf bei dem versuch von einem Socket scanner Daten zu erhalten. Netzwerkprogrammierung 1
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
A Classpath Tomcat, Start von Programm aus Tomcat Container Netzwerkprogrammierung 1
M Java-Programm aus dem Web laden Netzwerkprogrammierung 3
E Eingabe (auf Internetseite) durch ein Programm machen lassen Netzwerkprogrammierung 19
T UDP Pakete empfangen ohne Programm zu blockieren Netzwerkprogrammierung 3
S HTTP Servlet als Instanzen im Programm starten Netzwerkprogrammierung 3
M Paktete abfangen und zu eigenem Programm umleiten - wie? Netzwerkprogrammierung 5
C Programm per Hompage ansprechen Netzwerkprogrammierung 4
T Download Programm - Download endet vorzeitig (bricht ab) Netzwerkprogrammierung 11
K Programm als Webservice laufen lassen Netzwerkprogrammierung 5
G ObjectInputStream hängt ganzes Programm auf... Netzwerkprogrammierung 7
C Vom Server Programm auf Client starten Netzwerkprogrammierung 2
J net send Popups abfangen und in eigenem Programm ausgeben. Netzwerkprogrammierung 12
M Befehle an externes Java-Programm senden Netzwerkprogrammierung 8
D client programm, passwortverschlüsselung Netzwerkprogrammierung 16
S HTTP Kleines Programm für den Routerneustart Netzwerkprogrammierung 3
M Java-Programm als Webserver erzeugt HTML Netzwerkprogrammierung 8
J Framework/ Muster für Chat-ähnliches Programm gesucht Netzwerkprogrammierung 2
N Datenaustausch zwischen Java-GUI und PHP-Programm über SOAP Netzwerkprogrammierung 19
B Server-Programm wird durch "read" beendet Netzwerkprogrammierung 8
P Wie gibt man einem GUI Programm ein Web interface? Netzwerkprogrammierung 5
A Programm umschreiben von Pipes auf Sockets Netzwerkprogrammierung 12
P Java Programm als Dienst auf Server Netzwerkprogrammierung 11
T Theoriefrage : Programm-zugriffsrechte auf Netzlaufwerk Netzwerkprogrammierung 14
J Mit Java Anwendung ein (externes) Programm auf einem AIX Rechner starten Netzwerkprogrammierung 6
S Commons Net 2.0 und FTP in meinem Programm Netzwerkprogrammierung 4
lordcarlos Erstes TCP programm - output stream problem Netzwerkprogrammierung 2
A Probleme mit kleinem Netzwerk Programm Netzwerkprogrammierung 30
L RMI Programm beendet ohne Fehler sofort nach Start (Windows 2000) Netzwerkprogrammierung 7
L SSL Verbindung aber Server wird erst im Programm festgelegt Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben