Hallo, ich habe ein programm geschrieben, dass einen stream wieterleiten soll, doch das problem ist, es zieht dauerhaft 100% cpu auslastung auf einen root server. Ich weiß immer noch net, woran das liegt.
wichtigster codeausschnitt: (restlicher code wird bei bedarf gepostet
wichtigster codeausschnitt: (restlicher code wird bei bedarf gepostet
Java:
public void runServer(Shoutcast sev){
try{
while(live){
if(wait){
Socket client = server.accept();
ch = new clientHandler(client);
}
}
} catch(IOException e){writeLog("Error[runServer] {003}: "+ e.getMessage(), 1);}
}
protected class clientHandler extends Thread{
protected Socket clientSock;
clientHandler(Socket cl){
clientSock = cl;
connection = true;
writeLog("Warning[clientSock] {002}: Verbindung wurde hergestellt (vom clienten)", 2);
System.out.println("verbindung wurde hergestellt (vom clienten)");
try {
brC = new BufferedInputStream(clientSock.getInputStream());
} catch (IOException e) {
writeLog("Error[runServer] {004}: "+ e.getMessage(), 1);
}
try {
pwC = new BufferedOutputStream(clientSock.getOutputStream());
} catch (IOException e) {
writeLog("Error[runServer] {005}: "+ e.getMessage(), 1);
}
try {
byte[] cach = new byte[7];
int cachSize;
while((cachSize = brC.read(cach))!= -1 && wait){
line = new String(cach);
if(checkPwd(line)){
this.run();
wait=false;
}else{
pwC.write("Invalide Password\r\n".getBytes());
pwC.flush();
wait = true;
}
}
} catch (IOException e) {
writeLog("Error[runServer] {006}: "+ e.getMessage(), 1);
}
}
public void run(){
setStreams(host);
new Thread(new Runnable(){
public void run(){
try {
System.out.println("wird gelesen");
while(toServer.isConnected() && connection){
pwC.write("OK2\r\nicy-caps11\r\n\r\n".getBytes());
pwC.flush();
byte[] chunk = new byte[Integer.parseInt(users.get(userId)[2])/8];
int chunkSize;
while((chunkSize = br.read(chunk)) != -1){
//System.out.println(line1);
//pwC.print(line1);
pwC.write(chunk);
pwC.flush();
}
}
} catch (IOException e) {
writeLog("Error[runServer] {007}: "+ e.getMessage(), 1);
kill();
}
}
}).start();
new Thread(new Runnable(){
public void run(){
try {
pw.write((x + "\r\n").getBytes());
pw.flush();
while(toServer.isConnected() && connection){
byte[] chunk = new byte[Integer.parseInt(users.get(userId)[2])/8];
int chunkSize;
while((chunkSize = brC.read(chunk)) != -1){
//System.out.println(line1);
//pw.print(line1);
pw.write(chunk);
pw.flush();
}
}
} catch (IOException e) {
writeLog("Error[runServer] {008}: "+ e.getMessage(), 1);
kill();
}
}
}).start();
}
private void kill(){
wait = true;
connection = false;
}
}