ServerSocket bleibt beim lesen von Input hängen

Status
Nicht offen für weitere Antworten.

tec1

Aktives Mitglied
Hallo,

ich habe ein einfaches Beispiel für ein ServerSocket und ein Socket welches als Client fungiert. Im Prinzip funktioniert alles bis auf das Lesen des Inputs vom Client, hier bleibt der Server hängen. Mittlerweile fällt mir nichts mehr ein, zumal das Beispiel mit einfachem InputStream und OutputStream funktioniert, hier kann ich aber nur primitive Integer zwischen Client und Server austauschen. Wo ist mein Denkfehler? Ich für jede Hilfe dankbar.

Anbei der Code des Servers:

Java:
package de.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class MyTestServer {

	private ServerSocket _server;
	private int _nCountOfRequests;

	public MyTestServer() throws IOException
	{
		_nCountOfRequests = 0;
	}

	public void startServer(int nPort)
	{
		System.out.println("startServer method");
		
		try
		{
			_server = new ServerSocket(nPort);
		} catch (IOException e1)
		{
			System.out.println("start of server failed");
			e1.printStackTrace();
		}
		
		while (true)
		{
			try
			{
				Socket client = _server.accept();
				
				_nCountOfRequests++;
				
				BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
				PrintWriter output = new PrintWriter(client.getOutputStream());
				
				// hier bleibt er haengen
				StringBuffer inputText = new StringBuffer(input.readLine());
				
				System.out.println("server input: "+inputText);
				
				output.write(new String("_nCountOfRequests="+_nCountOfRequests+"; input: "+inputText));
				output.flush();
				
				input.close();
				output.close();
			} 
			catch (IOException e)
			{

			}
		}
	}

}

Der code des Clients:

Java:
package de.test;

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

public class MyTestClient {

	public MyTestClient()
	{

	}

	public void connectToServer(int nPort) throws UnknownHostException, IOException
	{
		Socket server = new Socket("localhost", nPort);
		PrintWriter output = new PrintWriter(server.getOutputStream());
		BufferedReader input = new BufferedReader(new InputStreamReader(server.getInputStream()));
		
		output.write("hello server");
		output.flush();
		
		String line;
		while ((line = input.readLine()) != null)
		{
			if (line.length() == 0)
				break;
			
			System.out.println("return from server:"+line);
		}

		server.close();
		input.close();
		output.close();
	}
}

Der code zum starten des Servers:

Java:
package de.test;

import java.io.IOException;

public class StartServer {

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		int nPort = 9900;

		try
		{
			System.out.println("start server");
			MyTestServer server = new MyTestServer();
			server.startServer(nPort);
		} catch (IOException e)
		{
			e.printStackTrace();
		}

	}

}

Der code zum starten des Clients:


Java:
package de.test;

import java.io.IOException;
import java.net.UnknownHostException;

public class StartClient {

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		System.out.println("start client");
		int nPort = 9900;

		MyTestClient client = new MyTestClient();
		try
		{
			client.connectToServer(nPort);
		} catch (UnknownHostException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}

	}

}
 
Zuletzt bearbeitet:
der Client liest
> input.readLine()

der Server schreibt
> output.write(new String("_nCountOfRequests="+_nCountOfRequests+"; input: "+inputText));
kein Zeilenumbruch, wie soll da eine ganze Line vom Client gelesen werden

new String() übrigens bitte quasi nie benutzen,
output.write("_nCountOfRequests="+_nCountOfRequests+"; input: "+inputText);
geht genauso

edit:
bzw. in der anderen Richtung genauso, Client schreibt
> output.write("hello server");
ohne Zeilenumbruch \n
 
Slater, du bist mein Held 🙂 Jetzt geht allles.

Es ist doch immer wieder so, dass die Bugs, die am schwersten zu finden sind, irgendwelche blöden Dinge sind.

P.S.: Ich bin ein bisschen aus der Übung
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben