# Sockets nach flush weiternutzen



## Looky (2. Januar 2008)

Moin Moin und frohes neues,

Also, das Jahr startet direkt mit einem Problem. (Nutze Java 5)

Ich habe eine Schnittstelle zu einem anderen Gerät. Dieses Gerät besitzt eine Ethernetschnittstelle, an die ich einen Socket binde. Wenn ich eine Nachricht rausschicken will muß ich offensichtlich ein flush machen, allerdings schließt er somit den Outputstream und damit auch den socket (oder seh ich das falsch?) 
Was muß ich ändern, um den Socket immer wieder nutzen zu können...?

D.h. der Socket soll offen bleiben, solange die Applikation läuft...

Hier der wichtige Ausschnitt meines bisherigen Codes


```
addr = InetAddress.getByName(dp_url.getHost());

			// Creates a stream socket and connects it to
			// the specified port number at the specified IP address
	if (MstDefMachine.useProxy)
	so = new ProxySocket(MstDefMachine.proxyHost, MstDefMachine.proxyPort, dp_url.getHost(), DEFAULT_PORT);
			else
				so = new Socket(addr, DEFAULT_PORT);

			// Enable SO_LINGER with 0 seconds
			// The maximum timeout value is platform specific. The setting only affects socket close.
			so.setSoLinger(true, 0);
			so.setSoTimeout(REQUEST_TIMEOUT);

			// gets an output stream for this socket
			out = new PrintWriter(so.getOutputStream());
			inr = new BufferedReader(new InputStreamReader(so.getInputStream(), "UTF8"));

			strHttpOut = "POST / HTTP/1.1\r\nContent-Type: text/xml; charset=utf-8\r\nSOAPAction: " + action + "\r\nContent-Length:" + Integer.toString(req.length())
					+ "\r\n\r\n" + req;
			out.println(strHttpOut);
			out.flush();

while (true) {
				if (inr.ready()) {
					for (int i = 0; i < 2048; i++)
						strR[i] = 0;

					while ((count = inr.read(strR, 0, 2048)) > 0) {
						if (strR[0] == 0)
							break;
						//strResponse = strResponse + (new String(strR, 0, count));
						sb.append(new String(strR, 0, count));
					}

					strResponse = sb.toString();
					
					sb = null;
					inr.close();
```

Danke..


----------



## dto (2. Januar 2008)

Also durch flush veranlasst du nur das der Ausgabepuffer geleert wird dadurch wird nicht der Socket geschlossen.

Dein Problem muss an anderer Stelle liegen.

Was ich nicht ganz verstehe warum du nach jedem Lauf den input schließt inr.close();


----------



## zeja (3. Januar 2008)

An dem inr.close dürfte es auch liegen. Der basiert nämlich auf dem Stream von dem Socket und schliesst diesen somit auch.


----------

