# TCP/IP String senden



## Gast (20. Okt 2005)

Hallo,
ich sende per TCP/IP einen String:


```
sock = new Socket(IP, Port);
              //Timeout setzen
              sock.setSoTimeout(100);
              in = sock.getInputStream();
              out = sock.getOutputStream();
...

String Telegramm = new String("Hallo!");

            try {
                //an Server schicken
                out.write(Telegramm.getBytes());
            ...
```

Dieser String geht an eine Box die es dann für die RS232 Schnittstelle (COM 1) umwandelt, doch dann kommt nicht mehr der String an, sondern der Zeiger galub ich - also sowas wie: [B@183f74d

Von TCP/IP zu TCP/IP direkt klappt es. Was muß ich da ändern?


----------



## Bleiglanz (20. Okt 2005)

getBytes ist mist, verwende wenigstens getBytes("ISO-8859-1") oder sowas

und der empfänger muss das byte[] holen und mit dem gleichen CharacterEncoding wieder dekodieren

Frage: wie liest du denn den String?

Tipp: verwende doch lieber gleich einen Writer oder die ObjectStreams


----------



## stev.glasow (20. Okt 2005)

Was jetzt?
In dem Code oben schickst du die Bytes eines Strings über TcpIp - und dann? Was für eine Box? Was für eine Speicheradresse ?


----------



## Mag1c (20. Okt 2005)

Hi,

ich denke, daß das dein String ist, allerdings noch als byte-Array. "[" -> Array + "B" -> byte + "@183f74d" -> Adresse. Wandel mal das byte-Array in einen String.

Gruß
Mag1c


----------



## Guest (20. Okt 2005)

Hat sich erledigt, das Funkmodem mußte auf 2 Stopbits eingestellt werden - jetzt geht es! Trotzdem THX!

Zu Verständnis:
Ich schicke per TCP/IP Daten an eine Wandlerbox von TCP/IP zu RS232, diese Daten übernimmt ein Funkmodem über seine RS232 Schnittstelle und schickt sie an ein anderes Funkmodem das wieder über RS232 empfangene Daten ausgibt. Das Funkmodem an der Wandlerbox hatte das Problem mit den 2 Stopbits beim senden, das Empfangen ging schon vorher.


----------



## Wyvern (1. Mrz 2007)

Der Thread ist der einzige, der einigermassen passen könnte. Aber kann trotzdem noch nicht viel mit anfangen. 

Ich soll einen String (600Zeichen fest) per TCP/IP an einen Server mit angegebener Portnummer senden, und dann auf Antwort warten, bevor ich mit meinem eigenen Code weitermachen darf. 
Wie stell ich das ungefähr an? Bin für jeden Tip dankbar. 

Das mit Sockets klingt aber gar nicht schlecht. Wie bekomm ich das mit dem warten hin?


----------



## thE_29 (1. Mrz 2007)

Socket ist für TCP/IP und du kannst sagen

socket.setSoTimeout(int millisecs)

dh, solange wartet er MAX wenn dann nix kommt wirft er entweder ne Exception oder geht weiter (weiß das jetzt net auswendig)


----------



## Roar (2. Mrz 2007)

Wyvern hat gesagt.:
			
		

> auf Antwort warten


alle methoden in java.io die aus streams lesen blockieren :!:


----------



## Wyvern (6. Mrz 2007)

Das heißt also, mit 


```
try {
			Socket sock = new Socket("1.2.3.4",1001);
			sock.setSoTimeout(0);
			InputStream in = sock.getInputStream();
			OutputStream out = sock.getOutputStream();
			String sendString = '\u0002' + mainRecord + continuationRecord + '\u0003';
			out.write(sendString.getBytes());
			out.flush();
			in.read(receiveString.getBytes());
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
```

müsst ich in receiveString die Antwort des Servers 1.2.3.4 haben?


----------



## Roar (6. Mrz 2007)

nein, aber nur weil getBytes() ein neues byte array erzeugt.


----------



## Wyvern (6. Mrz 2007)

```
sock.setSoTimeout(0);
InputStream in = sock.getInputStream();
OutputStream out = sock.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(out);
InputStreamReader isr = new InputStreamReader(in);
String sendString = '\u0002' + mainRecord + continuationRecord + '\u0003';
osw.write(sendString);
char[] receiveString = new char[300];
isr.read(receiveString);
System.out.println(receiveString.toString());
```

Dann so?


----------



## thE_29 (6. Mrz 2007)

du kannst auch byte[] nehmen



```
byte buf[] =new byte[1024];

int len = isr.read(buf, 0, buf.length);

System.out.println(new String(buf,0,len));
```

Und du musst auf die zurückgegebene Länge überprüfen! Kann ja sein das es mehr oder weniger ist als der buffer!


----------

