Socket

Hallo,

ich habe ein Java-Applikation zum Server Simulation geschrieben.

Nach der Anmeldung „Connection“ der Client, soll der server Daten mittels 2 SendButton zum Client senden. Aber wenn ich das Programm ausführe , wird mein Prozessor ausgelastet.
ich glaube, es liegt daran, dass ich BufferedInputStream und BufferedOutputStream nicht geschlossen habe. aber wenn ich die schliesse, werden keine Daten gesendet.

ich wäre sehr dankbar wenn jemenden mir helfen kann, weil ich schon 2 wochen mit diesem problem beschäftigt bin. so sieht mein Programm

public void actionPerformed(ActionEvent eve) {
String cmd;
cmd = eve.getActionCommand();
if (cmd.equals(„Quittierung“)) {
quitflag = true;
} else if (cmd.equals(„Messen“)) {
messflag = true;
}
}

try {
clientSocket = serverSocket.accept();
connectlabel.setText(InetAddress.getLocalHost() + " Log On");
try {
in = new BufferedInputStream(clientSocket.getInputStream());
out = new BufferedOutputStream(
clientSocket.getOutputStream());
String inputLine = „“, messString = „“;
int t = 0;
// Lesen der Anmelddaten
t = in.read(buf, 0, 64);
System.out.println( "empfangene nachricht von server: " + byteToString(buf));
while (listening) {
if (quitflag) { // if button 1 angecklickt?
out.write(quitBuf, 0, 64);// send quitung
out.flush(); quitflag = false;
} else
if (messflag) {
out.write(messBuf, 0, 64);// send Messung
out.flush();
System.out.println(„Mess Daten gesendet“);
messflag = false;
}
}
} finally {
clientSocket.close();
System.err.println(„Clientsocketfehler“);
}
} finally {
serverSocket.close();
System.err.println(„Serversocketfehler“);
}

Gruss.
Hicham

Moin

(Benutz bei so einem Quelltext doch bitte den pre-tag. Das hilft ungemein)

public void actionPerformed(ActionEvent eve) {
        String cmd;
        cmd = eve.getActionCommand();
        if (cmd.equals("Quittierung")) {
                quitflag = true;
        } else if (cmd.equals("Messen")) {
                messflag = true;
        }
}

Weiss du was Thread-synchronization ist ? Anscheinend nicht, den die fehlt schonmal. Das ist in dem Fall aber nicht der Grund der 100% CPU-Last. Der Fehler steht weiter unten:

        while (listening) {
                if (quitflag) { // if button 1 angecklickt?
                        out.write(quitBuf, 0, 64);// send quitung
                        out.flush(); 
                        quitflag = false;
                } else 
                        if (messflag) {
                                out.write(messBuf, 0, 64);// send Messung
                                out.flush();
                                System.out.println("Mess Daten gesendet");
                                messflag = false;
                        } 
                }
        }

Wenn quitflag und messflag false und listening true sind läuft das Ding ohne Ende immer wieder durch die while-Schleife. Das muss 100% Last ergeben, der Thread wartet ja nie.

cu