Hallo,
Als Hausaufgabe muss ich ein einfaches server-Programm schreiben das Verbindungsanfragen
über TCP entgegen nimmt und eine übermittelte Zahl um eins inkrementiert und zusammen mit einem Zufalls String zurückgibt. Außerdem soll das Programm in der Lage sein mehrere Clients gleichzeitig zu bedienen.
Leider macht mein Programm nicht zu 100% das was ich von ihm erwarte und ich finde den Fehler einfach nicht.
Wäre nett wen hier mal jemand drüber gucken könnte.
Teilweise funktioniert das Programm aber die erste anfrage wird vom Server nicht beantwortet, jede weitere dann schon.
Außerdem bekomme ich eine exception
Als Hausaufgabe muss ich ein einfaches server-Programm schreiben das Verbindungsanfragen
über TCP entgegen nimmt und eine übermittelte Zahl um eins inkrementiert und zusammen mit einem Zufalls String zurückgibt. Außerdem soll das Programm in der Lage sein mehrere Clients gleichzeitig zu bedienen.
Leider macht mein Programm nicht zu 100% das was ich von ihm erwarte und ich finde den Fehler einfach nicht.
Wäre nett wen hier mal jemand drüber gucken könnte.
Code:
import java.io.*;
import java.net.*;
public class RandomClient
{
public static final int PORT = 4432;
public static final String HOST = "127.0.0.1";
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException
{
einlesen();
Socket socket = new Socket(HOST, PORT);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String userInput;
while((userInput = String.valueOf(einlesen())) != null)
{
out.println(userInput);
System.out.println(in.readLine());
}
socket.close();
out.close();
in.close();
}
/**
* Liest einen Integerwert von der konsole ein
* @return den eingegebene Int Wert
* @throws IOException
*/
private static int einlesen() throws IOException
{
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(input);
int i = 0;
System.out.print("Zahl eingeben: ");
try
{
i = Integer.parseInt(reader.readLine());
}
catch (NumberFormatException e)
{
System.out.println("Bitte nur Zahlenwerte");
}
return i;
}
}
Code:
import java.io.*;
import java.net.*;
/**
* Das Server Programm
* @author master
*
*/
public class RandomServer
{
public static final int PORT = 4432;
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException
{
// TODO Auto-generated method stub
ServerSocket serverSocket = new ServerSocket(PORT);
ServerThread serverThread = null;
Socket socket = null;
while(true)
{
socket = serverSocket.accept();
serverThread = new ServerThread(socket);
}
}
}
Code:
import java.io.*;
import java.net.*;
public class ServerThread extends Thread
{
private Socket socket = null;
public ServerThread(Socket socket)
{
this.socket = socket;
this.start();
}
public static String zufallsStringErzeugen()
{
String zufallsString = "";
MeinRandom random = new MeinRandom();
int anzahl = random.nextInt(1, 20);
for(int i =1;anzahl >= i; i++){
char pass = (char)random.nextInt(65,90);
/*System.out.println(i + pass);*/
zufallsString = zufallsString + String.valueOf(pass);
}
return zufallsString;
}
public void run()
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
String line;
while((line = in.readLine()) != null)
{
int i = Integer.parseInt(line);
i++;
out.println(zufallsStringErzeugen() + i);
}
out.close();
socket.close();
in.close();
//serverSocket.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Teilweise funktioniert das Programm aber die erste anfrage wird vom Server nicht beantwortet, jede weitere dann schon.
Außerdem bekomme ich eine exception
Code:
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at ServerThread.run(ServerThread.java:38)