# Erstes TCP programm - output stream problem



## lordcarlos (16. Mai 2009)

Guten tag.

Ich schreibe gerade mein erstes TCP/IP Programm, es soll zu einem server (der von einem Freund in php geschrieben wurde) connecten, eine Zeile senden und zwei Zeilen parsen. Hört sich jetzt leicht an aber ich bekomme das nicht ganz hin.

Ich habe erstmal den server via telnet getestet. Da muss ich nach dem verbinden blos "RETR testhash" eingeben und Enter drücken. Funktioniert auch wunderbar, blos nicht mit meinem java programm:


```
DataOutputStream ou = null; // the output stream
pronSock = new Socket(host, port); // open socket

ou = new DataOutputStream(pronSock.getOutputStream());
String befehl = "RETR " + hash + "\r\n";
ou.writeChars(befehl);
```

Jetzt bekomme ich aber vom Server einen Fehler:
_ERR INVALID_COMMAND "RETR" testhash_
Ich habe es auch schon ohne \r oder \n getestet, gleicher Fehler.
Ist _writeChars_ vielleicht nicht das richtige?
Wenn ich _writeBytes_ benutze sendet er den Befehl nur Buchstabe für Buchstabe, jedenfals bekomme ich ein Fehler das es command "R" nicht gibt.

Ich hoffe ich habe mich verständlich ausgedrückt.

Mfg Lord-carlos


----------



## SlaterB (16. Mai 2009)

> Ich habe erstmal den server via telnet getestet.

du meinst, Telnet ist der Client? 
teste doch, was ankommt, einmal per Telnet und einmal per Java-Programm, 
wenn der Server von deinem Freund geschrieben ist, kann der oder du den vielleicht debuggen,
ansonsten an gleicher Stelle ein anderer PHP oder Java-Server, 
irgendwas muss man empfangenden Befehl oder Kommunikationsaufbau anders sein


----------



## lordcarlos (17. Mai 2009)

ja, mit telnet als Klient.
Der freund sieht auch nicht richtig was falsch ist, er hat extra ein debugging Output geschrieben.

Ich habe kurz mal einen TCP Server geschrieben der alles was reinkommt einfach ausprintet, ich sehe da aber kein unterschied zwischen telnet und meinem Programm.

```
carlos@kaese:/tmp/java$ java echo3
RETR testhash
^Ccarlos@kaese:/tmp/java$ java echo3
RETR testhash
^Ccarlos@kaese:/tmp/java$
carlos@kaese:/tmp/java$
```

Woran könnte so was liegen? Hat sowas vielleicht mit charset oder linebreak zu tun?
Wie würdet ihr ein "RETR testhash" [enter] via TCP machen? Auch mit DataOutputStream?


Mfg lord-carlos

*EDIT:* ok, Kollege hat nochmal nachgeguckt was bei ihm ankommt:
telnet:

```
QUIT
```
java

```
QUIT
```
Also ein blöder Kasten davor? Wo kommt der her?

EDIT: Ej mit PrintStream geht es. Kann also als gelöst betrachtet werden.


----------

