Moin zusammen,
ich habe ein rating server/client programmiert, bei der ganz einfache Ratings über das Comandeline durchgeführt werden soll. Das Problem ist, dass egal mit welcher Schleife (vom Client aus) ich auch versuche die Verbindung zum Server abzubauen es einfach nicht klappt:
ich will, dass aufm server der text immer verändert werden kann, daher muss der Client erkennen, dass sobald eine Leerzeile steht, oder ein "besonderes" zeichen, dass er die Verbindung abbaut, das klappt aber nicht.
Hier habe ich z.b. die do While schleife angewendet, aber es funzt trotzdem nicht, würde mich über jeden Hinweis oder Verbesserungsvorschlag freuen
Hier der Client
Hier der Server dazu:
THX schonmal im Vorraus vom Noob ;-)
ich habe ein rating server/client programmiert, bei der ganz einfache Ratings über das Comandeline durchgeführt werden soll. Das Problem ist, dass egal mit welcher Schleife (vom Client aus) ich auch versuche die Verbindung zum Server abzubauen es einfach nicht klappt:
ich will, dass aufm server der text immer verändert werden kann, daher muss der Client erkennen, dass sobald eine Leerzeile steht, oder ein "besonderes" zeichen, dass er die Verbindung abbaut, das klappt aber nicht.
Hier habe ich z.b. die do While schleife angewendet, aber es funzt trotzdem nicht, würde mich über jeden Hinweis oder Verbesserungsvorschlag freuen
Hier der Client
Java:
import java.io.*;
import java.net.*;
public class Rating_Client
{
public static void main(String[] args)
{
Socket socket = null;
try
{
String host = args[0];
int port = Integer.parseInt(args[1]);
socket = new Socket(host, port);
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(
socket.getOutputStream(), true);
System.out.println("########################## Rating Programm ##############################");
System.out.println("Die Verbindung zum Server wurde aufgebaut...");
System.out.println(" ");
System.out.println("Du hast die Moeglichkeit ein Rating abzugeben");
System.out.println("Nachdem du dein Rating abgegeben hast, wird dir das Ergebnis angezeigt.");
System.out.println(" ");
BufferedReader input = new BufferedReader(
new InputStreamReader(System.in));
String msg = in.readLine();
System.out.println(msg);
String line;
line = input.readLine();
if (line != null || !line.equals("q"))
{
out.println(line);
System.out.println(in.readLine());
System.out.println("");
}
do
{
System.out.println(in.readLine());
}while(in.readLine()!="");
System.out.println("");
System.out.println("################### Programm Ende #####################################");
in.close();
out.close();
input.close();
}
catch (Exception e)
{
System.err.println(e);
}
finally
{
try
{
if (socket != null)
socket.close();
}
catch (IOException e) { }
}
}
}
Hier der Server dazu:
Java:
import java.io.*;
import java.net.*;
public class Rating_Server
{
private int port;
private int backlog;
private int i=0, j=0, k=0, l=0;
private String Frage="Wie findest du die Farbe Blau auf einer Punkte-Skala von 1(schlecht) bis 3(gut) und 0 fuer enthaltung. Mit q beendest du das Programm sofort.";
public Rating_Server(int port, int backlog)
{
this.port = port;
this.backlog = backlog;
}
public void startServer()
{
try
{
ServerSocket server = new ServerSocket(port, backlog);
InetAddress addr = InetAddress.getLocalHost();
System.out.println("Der Rating Server auf " +
addr.getHostName() + "/" + addr.getHostAddress() +
":" + port + " wurde gestartet ...");
process(server);
}
catch (IOException e)
{
System.err.println(e);
}
}
private void process(ServerSocket server) throws IOException
{
while (true)
{
Socket client = server.accept();
String clientAddr = client.getInetAddress().getHostAddress();
int clientPort = client.getPort();
System.out.println("Die Verbindung zum Client: " +
clientAddr + ":" + clientPort + " wurde aufgebaut");
try
{
BufferedReader in = new BufferedReader(
new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(
client.getOutputStream(), true);
out.println(Frage);
String input;
while ((input = in.readLine()) != null)
{
try
{
int ininput = Integer.parseInt(input);
switch(ininput)
{
case 0: out.println("Du hast folgendes eingegeben: "+ input); i++; break;
case 1: out.println("Du hast folgendes eingegeben: "+ input); j++; break;
case 2: out.println("Du hast folgendes eingegeben: "+ input); k++; break;
case 3: out.println("Du hast folgendes eingegeben: "+ input); l++; break;
default: out.println("Deine Eingabe war fehlerhaft, bitte gib von 0-3 ein."); break;
}
int z=i+j+k+l;
out.println("Es wurden insgesamt: "+ z + " Ratings durchgefuehrt");
out.println("Es wurde: "+ i +" - mal Enthalten,");
out.println("Es wurde: "+ j +" - mal Schlecht,");
out.println("Es wurde: "+ k +" - mal Neutral,");
out.println("Es wurde: "+ l +" - mal Gut bewertet.");
out.println("");
}
catch(NumberFormatException e)
{
out.println("Deine Eingabe war fehlerhaft");
out.println("Bitte starte das Programm neu.");
}
}
in.close();
out.close();
}
catch (IOException e)
{
System.err.println(e);
}
finally
{
try
{
if (client != null)
client.close();
}
catch (IOException e) { }
System.out.println("Verbindung zum Client: " +
clientAddr + ":" + clientPort + " wurde abgebaut");
}
}
}
public static void main(String[] args)
{
if (args.length != 1 && args.length != 2)
{
System.err.println("java -jar Rating_Server <port> [<backlog>]");
System.exit(1);
}
int port = Integer.parseInt(args[0]);
int backlog = 30;
if (args.length == 2)
backlog = Integer.parseInt(args[1]);
new Rating_Server(port, backlog).startServer();
}
}
THX schonmal im Vorraus vom Noob ;-)