hallo ich habe ein programm erstellt bei dem der client dem server 256kb schickt und dieser die 256kb wieder zurückschickt. das zeit für das ganze wird gemessen, wird aber bei jedem durchlauf um ca. 2-3 sekunden länger! woran kann das liegen? muss ich irgendetwas leeren oder so? es ist wichtig dass die zeiten immer ungefähr gleich sind, ich werde ein paar tests machen und von den ergebnissen den durchschnitt nehmen, aber die zeiten sollten mal mehr, mal weniger werden und nicht wachsen! was habe ich nicht bedacht?
interne klasse aus hauptklasse server: @clienten ist eine arraylist mit "serverclient". serverclient ist eine hilfsklasse die nur ein socket als datenfeld hat und unteranderem read und write als methoden
aus serverclient:
aus clientenklasse:
button send1 sendet die 256kb (actionlistener).
@edit: im nachhinein fällt mir auf dass read und write relativ gleich bei server und client sind
interne klasse aus hauptklasse server: @clienten ist eine arraylist mit "serverclient". serverclient ist eine hilfsklasse die nur ein socket als datenfeld hat und unteranderem read und write als methoden
Java:
private class ReadData extends Thread {
@Override
public void run() {
while (true) {
for (int i = 0; i < clienten.size(); i++) {
try {
String t = clienten.get(i).read();
if(t == null) throw new Exception();
clienten.get(i).write(t);
} catch (Exception se) {
System.out.println("Client "+clienten.get(i).getSocket().getInetAddress() + " left");
try {
clienten.get(i).close();
} catch (Exception e) {
e.printStackTrace();
}
clienten.remove(i);
i--;
}
}
}
}
}
aus serverclient:
Java:
public void write(String nachricht) throws IOException {
if(nachricht != null) {
PrintWriter printWriter = new PrintWriter(s.getOutputStream());
printWriter.println(nachricht);
printWriter.flush();
} else {
System.err.println("Server: Ich schreibe nicht null!");
}
}
public String read() throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String t = in.readLine();
System.out.println(s.getInetAddress() + " sent: "+t);
return t;
}
aus clientenklasse:
Java:
public void write(String nachricht) throws IOException {
if(nachricht != null) {
PrintWriter printWriter = new PrintWriter(server.getOutputStream());
printWriter.println(nachricht + " ");
printWriter.flush();
} else {
System.err.println("Client: Ich schreibe nicht null!");
}
}
public String read() throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
String t = in.readLine();
//System.out.println("Server sent: "+t);
return t;
}
@Override
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == senden) {
try {
long time = System.currentTimeMillis();
write(eingabe.getText());
while(read() == null);
time = System.currentTimeMillis() - time;
zeit.setText("Letzte Zeit: " + time);
} catch(Exception e) {
e.printStackTrace();
}
} else if(ae.getSource() == send1) {
int mb = 256 * 1024;
StringBuilder sb = new StringBuilder(mb);
for (int i=0; i<mb; i++) {
sb.append('a');
}
try {
long time = System.currentTimeMillis();
write(sb.toString());
while(read() == null);
time = System.currentTimeMillis() - time;
zeit.setText("Letzte Zeit: " + time);
} catch(Exception e) {
e.printStackTrace();
}
} else if(ae.getSource() == exit) {
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@edit: im nachhinein fällt mir auf dass read und write relativ gleich bei server und client sind
Zuletzt bearbeitet: