Hallo Leute,
Ich habe gerade erst begonnen mich mit der Client Server Programmierung zu beschäftigen und bin deshalb noch ein Anfänger in diesem Bereich. Ich wollte einfach mal eine ganz kleine Client-Server-Anwendung programmieren. Der Server soll lediglich einen Text zum Client schicken und der Client soll diesen Text einfach lesen uns ausgeben. Jedoch funktioniert das nicht so ganz. Hier ist mal der Quellcode für den Client und den Server
Server
Und der Client
Wenn ich das Programm mit dem Kommandozeilenparameter z.b. 2222 (für einen benutzbaren Port) aufrufe, dann bekommen ich beim Server, sobald der Client sich angemeldet hat, die Nachricht "Server gestartet" danach tut sich gar nichts mehr. Beim Client bekomme ich eine IOException.
Kann mir jemand erklären, was ich falsch mache?
Ich habe gerade erst begonnen mich mit der Client Server Programmierung zu beschäftigen und bin deshalb noch ein Anfänger in diesem Bereich. Ich wollte einfach mal eine ganz kleine Client-Server-Anwendung programmieren. Der Server soll lediglich einen Text zum Client schicken und der Client soll diesen Text einfach lesen uns ausgeben. Jedoch funktioniert das nicht so ganz. Hier ist mal der Quellcode für den Client und den Server
Server
Java:
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
int port = Integer.parseInt(args[0]); // Kann eine ArrayIndexOutOfBound Exception werfen, aber auch eine NumberForamtException--> Beide Exceptions müssen aber nicht gefangen werden--> Unchecked Exceptions
ServerSocket socket = new ServerSocket(port); // Kann eine IO Exception werfen, die gefangen werden muss --> Ist eine checkedException
Socket s = socket.accept();
System.out.println("Server gestartet");
BufferedWriter zumClient = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
BufferedReader vomClient = new BufferedReader(new InputStreamReader(s.getInputStream()));
zumClient.write("Hallo Client, ich bin der Server");
} catch (ArrayIndexOutOfBoundsException a) {
System.out.println("ArrayIndexOutOfBoundsException");
} catch (NumberFormatException n) {
System.out.println("NumberFormatException");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Und der Client
Java:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
int port = Integer.parseInt(args[0]);
Socket clientSocket = new Socket("localhost", port); // Kann eine UnknownHostExceptionWerfen, die ABGEFANGEN werden muss --> CheckedException
// Kann aber auch eine IOException werden, die abgefangen werden muss
BufferedWriter zumServer = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
BufferedReader vomServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
System.out.println(vomServer.readLine());
}
catch (ArrayIndexOutOfBoundsException a) {
System.out.println("ArrayIndexOutOfBoundsException");
} catch (UnknownHostException u) {
System.out.println("Unbekannter Host");
} catch (IOException e) {
System.out.println("IOException");
}
}
}
Wenn ich das Programm mit dem Kommandozeilenparameter z.b. 2222 (für einen benutzbaren Port) aufrufe, dann bekommen ich beim Server, sobald der Client sich angemeldet hat, die Nachricht "Server gestartet" danach tut sich gar nichts mehr. Beim Client bekomme ich eine IOException.
Kann mir jemand erklären, was ich falsch mache?