Hallo,
ich bin blutiger Anfänger in Java und stehe gerade total auf dem Schlauch. Ich soll einen kleinen Client programmieren, der sich zuerst an einem Server anmeldet und danach permanent alle Daten des Server's ließt.
Der Server schickt unregelmäßig Telegramme. Ein Telegramm besteht aus einem einem Null-terminierten String (nur ASCII-Zeichen mit 0x00 als Trenner zwischen den Telegrammen). ANSI Encoding 1252
Zuerst muss sich der Client an dem Server anmelden. Dazu soll er ein "HalloServer<0x00>" an den Server schicken. Der Server antwortet darauf mit beliebigen Telegrammen z.B. "HalloClient<0x00>", die jeweils durch das 0x00 terminiert werden.
Soweit die Theorie.
Das ist derzeit mein Client:
Ich verstehe derzeit nicht recht, was ich falsch mache. Der Server antwortet jedoch nicht. Daneben bin ich mir nicht sicher, ob ich die Antwort des Servers überhaupt richtig auslese und ausgeben. Wie bekomme ich mit wie lang die Nachricht ist? Ich müsste doch eigentlich jedes Zeichen einzeln lesen oder? Aber wie? Wie bekomem ich es hin, dass Client hier permanent ließt und z.B. bei einem Verbindungsproblem wieder ein "HalloServer<0x00>" schickt?
Irgendwie stehe ich mit den Sockets auf Kriegsfuß.
Danke für eure Hilfe
Gruß
Mike
ich bin blutiger Anfänger in Java und stehe gerade total auf dem Schlauch. Ich soll einen kleinen Client programmieren, der sich zuerst an einem Server anmeldet und danach permanent alle Daten des Server's ließt.
Der Server schickt unregelmäßig Telegramme. Ein Telegramm besteht aus einem einem Null-terminierten String (nur ASCII-Zeichen mit 0x00 als Trenner zwischen den Telegrammen). ANSI Encoding 1252
Zuerst muss sich der Client an dem Server anmelden. Dazu soll er ein "HalloServer<0x00>" an den Server schicken. Der Server antwortet darauf mit beliebigen Telegrammen z.B. "HalloClient<0x00>", die jeweils durch das 0x00 terminiert werden.
Soweit die Theorie.
Das ist derzeit mein Client:
Java:
import java.io.*;
public class Client {
public static void main(String[] args) {
Client client = new Client();
try {
client.test();
} catch (IOException e) {
e.printStackTrace();
}
}
void test() throws IOException {
String ip = "192.168.1.1"; // localhost
int port = 7009;
java.net.Socket socket = new java.net.Socket(ip,port); // verbindet sich mit Server
String zuSendendeNachricht = "HalloServer0x00";
schreibeNachricht(socket, zuSendendeNachricht);
while (true){
String empfangeneNachricht = leseNachricht(socket);
System.out.println(empfangeneNachricht);
}
}
void schreibeNachricht(java.net.Socket socket, String nachricht) throws IOException {
PrintWriter printWriter =
new PrintWriter(
new OutputStreamWriter(
socket.getOutputStream()));
printWriter.print(nachricht);
printWriter.flush();
}
String leseNachricht(java.net.Socket socket) throws IOException {
BufferedReader bufferedReader =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
char[] buffer = new char[200];
int anzahlZeichen = bufferedReader.read(buffer, 0, 200); // blockiert bis Nachricht empfangen
String nachricht = new String(buffer, 0, anzahlZeichen);
System.out.println(nachricht);
}
}
Ich verstehe derzeit nicht recht, was ich falsch mache. Der Server antwortet jedoch nicht. Daneben bin ich mir nicht sicher, ob ich die Antwort des Servers überhaupt richtig auslese und ausgeben. Wie bekomme ich mit wie lang die Nachricht ist? Ich müsste doch eigentlich jedes Zeichen einzeln lesen oder? Aber wie? Wie bekomem ich es hin, dass Client hier permanent ließt und z.B. bei einem Verbindungsproblem wieder ein "HalloServer<0x00>" schickt?
Irgendwie stehe ich mit den Sockets auf Kriegsfuß.
Danke für eure Hilfe
Gruß
Mike