Ich habe einmal eine Frage zur Server / Socket-Programmierung, mit der ich mich vor einer Weile einmal beschäftigt habe, auch wenn das auch shcon lange her ist.
Es geht darum, dass ich einen ServerSocket habe, der darauf wartet, dass ich ein Client mit ihm verbindet:
Hier der ServerSocket:
Hier der ClientSocket:
Meine Frage ist nun folgende: Ich speichere ein Connection-Objeckt (siehe die Klasse DateServer) in eine ArrayList, und hole mir diese in der Mainmethode über einen getter.
Die size()-Methode gibt für die ArrayList<Connection> aber 0 zurück, obeohl ein Connectionobjekt drin sein müsste. -> Wie kommt das?
Es geht darum, dass ich einen ServerSocket habe, der darauf wartet, dass ich ein Client mit ihm verbindet:
Code:
public class Main {
public static void main(String[] args) {
DateServer server = new DateServer();
server.start();
System.out.println(
server.getConnections().size()
);
DateClient client = new DateClient();
client.run();
}
}
Hier der ServerSocket:
Code:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Date;
public class DateServer extends Thread{
ArrayList<Connection> connections = new ArrayList<>();
public void run(){
try (ServerSocket listener = new ServerSocket(9090)) {
System.out.println("The Date Server is running");
while (this.isAlive()) {
try (Socket socket = listener.accept()) {
connections.add(new Connection());
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(new Date().toString());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public ArrayList<Connection> getConnections() {
return connections;
}
}
class Connection{
}
Hier der ClientSocket:
Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class DateClient {
public void run() {
Socket socket = null;
String response = "";
BufferedReader in = null;
try {
socket = new Socket("127.0.0.1", 9090);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
try {
response = in.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Server response: " + response);
}
}
Meine Frage ist nun folgende: Ich speichere ein Connection-Objeckt (siehe die Klasse DateServer) in eine ArrayList, und hole mir diese in der Mainmethode über einen getter.
Die size()-Methode gibt für die ArrayList<Connection> aber 0 zurück, obeohl ein Connectionobjekt drin sein müsste. -> Wie kommt das?