# Bytes als Rohdaten über Socket senden



## rabatz (4. Nov 2007)

Hallo,

Ich habe folgendes Problem:
Ich möchte über eine TCP-Verbindung Daten versenden. Das ganze funktioniert prinzipiell schon recht gut, außer dass ich gerne die Daten als Rohdaten versenden möchte. Ich verwende derzeit den Befehl:


```
byte number = 9;

out.println(number);
```

Dabei werden allerdings alle Zeichen in anzeigbare Zeichen umgewandelt. also wenn ich z.B. das Byte mit dem Inhalt 9 verschicken möchte wird dieses in 0x39 umgewandelt weches dem ASCII-Zeichen für 9 entspricht. Ich würde die Zeichen allerdings gerne als Rohdaten verschicken also den Bytewert 9 und nicht das ACII-Zeichen '9'.

Weiß jemant wie das ganze funktioniert?

LG

PS: Verbindung hab ich so ähnlich wie auf java.sun.com/docs/books/tutorial/networking/sockets/readingWriting.html realisiert.


----------



## Triebi (4. Nov 2007)

rabatz hat gesagt.:
			
		

> Dabei werden allerdings alle Zeichen in anzeigbare Zeichen umgewandelt. also wenn ich z.B. das Byte mit dem Inhalt 9 verschicken möchte wird dieses in 0x39 umgewandelt weches dem ASCII-Zeichen für 9 entspricht.


Das ist auch der Zweck eines Writers.



> Ich würde die Zeichen allerdings gerne als Rohdaten verschicken also den Bytewert 9 und nicht das ACII-Zeichen '9'.


(Buffered)OutputStream http://java.sun.com/j2se/1.5.0/docs/api/java/io/BufferedOutputStream.html
und das Gegenstück http://java.sun.com/j2se/1.5.0/docs/api/java/io/BufferedInputStream.html


----------



## rabatz (4. Nov 2007)

Erstmals vielen Dank für deine schnelle Antowrt. Leider weiß ich noch nicht ganz was du meinst. Ich bin noch etwas neu in Java und wäre über eine detailierte Anwort sehr froh.


LG

PS: Ich habe mal versucht den out Stream anstatt eines PrintWriter mit einem BufferedOutputStream zu implementieren aber leider kommt auf der Gegenseite nichts mehr an:


```
char[] buffer = new char[1024];
		Socket socket = null;
		DataOutputStream out = null;
		BufferedReader in = null;
		byte number = 0x09;

		try {
        			socket = new Socket();	
				socket.connect(new InetSocketAddress(host, port));
			
				out = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
				in = new BufferedReader(new InputStreamReader(socket.getInputStream(),Charset.forName("UTF-8")));
           
			socket.setSoTimeout(2000);
	    }
        catch (UnknownHostException e) {
            System.err.println("ERROR: Unknown host!!!");
        }
        catch (IOException e) {
            System.err.println("ERROR: Couldn't get I/O for the connection!!!");
        }



		try {
			//write welcome message
			out.write(number);
			out.flush();
			
			//get response
			length = in.read(buffer);


		} catch (IOException e) {
			System.err.println("ERROR reading from TCP-Socket: " + e.getMessage());
		}
```


----------



## Triebi (4. Nov 2007)

rabatz hat gesagt.:
			
		

> Leider weiß ich noch nicht ganz was du meinst. Ich bin noch etwas neu in Java und wäre über eine detailierte Anwort sehr froh.


Hm, OK. Neuer Versuch.
Zuerst empfehle ich aber, in den catch-Blöcken *getMessage()* mit auszugeben, am Besten aber *toString()*, das beinhaltet zusätzlich die konkrete (Unter)klasse. Vor allem bei IOException ist das wichtig.

Möglicherweise fehlen dir Kenntisse im Umgang mit Streams, sofern noch nicht geschehen, solltest du vielleicht dies durcharbeiten: http://java.sun.com/docs/books/tutorial/essential/io/index.html

Generell sollten gesendete Daten mit dem entsprechendem Gegenstück gelesen werden. Ersetze "Output" durch "Input" sowie "Writer" durch "Reader". Gewisse Freiheiten sind zwar möglich, lasse ich aber jetzt außen vor.
Am Besten zeigst du mal die Gegenseite.



> Ich habe mal versucht den out Stream anstatt eines PrintWriter mit einem BufferedOutputStream zu implementieren aber leider kommt auf der Gegenseite nichts mehr an:


Lass' mal den DataOutputStream weg und arbeite obige Punkte durch.


----------

