Ich versuche einen super einfachen Server zu programmieren, welcher mit Webbrowsern wie zum Beispiel Firefox sprechen kann.
Wenn ich den Server über seine interne IP (192.168.2.XXX) anspreche, funktioniert alles wie erwartet.
Wenn ich dasselbe von extern versuche, funktioniert es nicht mehr so ganz.
Ich verwende einen ServerSocket, warte auf eine Anfrage und erstelle anschließend einen InputStream und einen OutputStream.
[CODE lang="java" title="ServerSocket" highlight="15"] ServerSocket serverSocket = new ServerSocket(Port);
System.out.println("");
Socket clientSocket = serverSocket.accept();
System.out.println("accept");
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
StringBuffer daten = new StringBuffer();
String tmp = "";
while(true) {
tmp = in.readLine();
if(tmp == null || tmp.length() == 0) {
break;
} else {
daten.append(tmp);
}
}
System.out.println(daten.toString());
[/CODE]
Das Problem ist in Zeile 15. Der Code wird ab hier nicht weiter ausgeführt. Es ist auch nicht so, dass die Schleife nicht verlassen wird. Ich habe auch schon versucht anstelle von "n.readLine()" - "in.read()" zu verwenden. Ich habe auch schon versucht "InputStream in = clientSocket.getInputStream()" anstelle von "BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))" zu verwenden ... ohne Erfolg.
Wenn ich im Browser die Verbindung unterbreche, kommt die Anfrage des Browsers beim Server an. Aber dann kommt die Rückantwort des Servers nicht mehr beim Browser an. Wenn ich die while-Schleife weglasse, funktioniert es. Mache ich hier etwas grundsätzliches Falsch? Ich muss doch die Anfrage des Clienten lesen, bevor ich ihm antworte.
Ich verwende Ubuntu 20.04.2 LTS und JavaSE-1.8. Vielen Dank im Voraus!!!
Wenn ich den Server über seine interne IP (192.168.2.XXX) anspreche, funktioniert alles wie erwartet.
Wenn ich dasselbe von extern versuche, funktioniert es nicht mehr so ganz.
Ich verwende einen ServerSocket, warte auf eine Anfrage und erstelle anschließend einen InputStream und einen OutputStream.
[CODE lang="java" title="ServerSocket" highlight="15"] ServerSocket serverSocket = new ServerSocket(Port);
System.out.println("");
Socket clientSocket = serverSocket.accept();
System.out.println("accept");
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
StringBuffer daten = new StringBuffer();
String tmp = "";
while(true) {
tmp = in.readLine();
if(tmp == null || tmp.length() == 0) {
break;
} else {
daten.append(tmp);
}
}
System.out.println(daten.toString());
[/CODE]
Das Problem ist in Zeile 15. Der Code wird ab hier nicht weiter ausgeführt. Es ist auch nicht so, dass die Schleife nicht verlassen wird. Ich habe auch schon versucht anstelle von "n.readLine()" - "in.read()" zu verwenden. Ich habe auch schon versucht "InputStream in = clientSocket.getInputStream()" anstelle von "BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))" zu verwenden ... ohne Erfolg.
Wenn ich im Browser die Verbindung unterbreche, kommt die Anfrage des Browsers beim Server an. Aber dann kommt die Rückantwort des Servers nicht mehr beim Browser an. Wenn ich die while-Schleife weglasse, funktioniert es. Mache ich hier etwas grundsätzliches Falsch? Ich muss doch die Anfrage des Clienten lesen, bevor ich ihm antworte.
Ich verwende Ubuntu 20.04.2 LTS und JavaSE-1.8. Vielen Dank im Voraus!!!