# TCP IP comandos an IP Adresse senden



## soeni1987 (18. Juni 2009)

Hallo,

ich habe mal ein bischen mit sockets rum gespielt aber viel Erfahrung hab ich da jetzt nicht, meine frage, die ich dringend beantwortet haben müsste wäre, wie ich mit Java per TCP IP ein komando an einen Klienten schicken kann dessen IP ich weis.

Ich soll einen Lableprinter zum Laufen bekommen und dazu muss ich mit ihm über TCP IP kommunizieren.

Was brauch ich dazu für ein Socket?

Bitte helft mir, ich stehe etwas unter Zeitdruck

Sönke


----------



## 00d4vid (18. Juni 2009)

Ja kannst du, mit einem normalen Socket.

Hier solltest du eigentlich alle nötigen Infos finden:
http://java.sun.com/javase/6/docs/api/java/net/Socket.html


----------



## soeni1987 (18. Juni 2009)

danke für die Antwort, welchen port nehmen denn so drucker meistens?


----------



## soeni1987 (18. Juni 2009)

habe ein weiteres Problem und zwar schmeißt er mir immer socketerror.

hier mein code:


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * This Class has to test the communication with the termal Ethernet Printer 
 * "Orient BTP-L580" and prints an test label.
 *   
 * @author Soenke Paschko
 * @version	1.0
 */

public class Main {

	

	/**
	 * This is the main method
	 * @param args
	 */
	public static void main(String[] args) {
	
	try {
		Socket socket = new Socket("172.16.8.27", 4000);
		
		System.out.println("Socket is initialized");
		
		// Preparing new message
		schreibeNachricht(socket,"LF");  
		System.out.println("Linefeed");
		
	 	//String empfangeneNachricht = leseNachricht(socket);
	 	//System.out.println("Response: " + empfangeneNachricht);
		
		
	} catch (UnknownHostException e) {
		System.out.println("Socketerror unknown host");
	} catch (IOException e) {
		System.out.println("Socketerror IOExeption");
	}
		
		

	}
	
	public static void schreibeNachricht(java.net.Socket socket, String nachricht) throws IOException {
	 	 PrintWriter printWriter =
	 	    new PrintWriter(
	 	 	new OutputStreamWriter(
	 		    socket.getOutputStream()));
	 	printWriter.print(nachricht);
	 	printWriter.flush();
	    }
	
	public static String leseNachricht(java.net.Socket socket) throws IOException {
	 	BufferedReader bufferedReader =
	 	    new BufferedReader(
	 		new InputStreamReader(
	 	  	    socket.getInputStream()));
	 	char[] buffer = new char[200];
	 	int anzahlZeichen = bufferedReader.read(buffer, 0, 200); // blockiert bis Nachricht empfangen
	 	String nachricht = new String(buffer, 0, anzahlZeichen);
	 	return nachricht;
	 }


}
```


Der fehler ist IO Exeption


----------



## port29 (18. Juni 2009)

Also entweder verstehe ich nicht so ganz, was du machen möchtest oder du stellst dir alles zu einfach vor. 

Einem Drucker kannst du heute nicht mehr einfach sagen "Druck mir mal das Zeichen X aus". Es ging früher mit den Nadeldruckern ganz gut, heute ist es nicht mehr so einfach. Denn heute gibt es Treiber, die mit dem Drucker kommunizieren. Um so etwas nachzubilden, braucht man schon etwas mehr Geschick (und vor allem ZEIT!). Wenn du Glück hast, spricht der Drucker Postscript.

Wenn du es tatsächlich versuchen möchtest, gibt es zwei Möglichkeiten:

1) Du besorgst dir die Doku zu dem Drucker, darin stehen alle möglichen Befehle drin. Da wird es sehr schwer ran zu kommen sein.

2) Du holst dir den normalen Treiber des Druckers, druckst etwas aus und schneidest den Netzwerktraffic in dem Moment mit. Daraus kannst du dann Reverse Engineeren.

Auf welchen Port du commecten musst, kannst du herausfinden, indem du einfach nmap über die IP des Druckers jagst.


----------



## soeni1987 (18. Juni 2009)

Jein, ich habe einen labledrucker mitsammt der dokus und den befehlen. nun möchte ich diese befehle senden. leider wird meine verbindung immer zurückgewiesen. laut doku sollte der port 9100 zur kommunikation mit dem printer genutzt werden.

ansonsten ist das so OK`? wenn ich einfach nur Befehle an den Drucker senden will?

Die Befehle sind im übrigen schon in ascii codiert. d.h. die Asciiwerte von LF bilden wen befehl.


----------



## port29 (18. Juni 2009)

Fangen wir dann mal langsam an unser Problem zu analysieren.
Bist du sicher, dass du die richtige IP des Druckers hast? Lässt sich das Ding anpingen?
Bist du dir sicher, dass der Port richtig ist?
Brauchst du eine TCP oder UDP Verbindung?

Wenn es TCP ist, kannst du ganz einfach prüfen, ob alles richtig ist, indem du einfach das Programm "telnet" dafür benutzt.


----------



## soeni1987 (21. Juni 2009)

so hab jetzt die Beispielsoftware installiert und die geht auch nicht. pingen kann ich das gerät, laut doku ist der port 9100 dafür zuständig. habs auch schon mit Terraterm und telnet versucht, die verbindung wird aber immer zurückgewiesen.
Ich werde mich nochmal mit dem Verkäufer kurzschließen.


----------

