Avatar billede azazzs Nybegynder
04. maj 2006 - 15:45 Der er 5 kommentarer og
1 løsning

java IO tråde igen

jeg har et server program der står og lytter om der er klienter, når der kommer en klient oprettes der en tråd for den enkelte klient.

når tråden oprettes gemmes den også i et array for at kunne bruges senere, og for at kunne komme i kontakt med den enkelte klient.

class ProcessConnection extends Thread {
    Socket client;
    BufferedReader is;
    DataOutputStream os;
    Handprint hand;
    ListAll list;
    public byte kommando;
    public byte[] Ip;
    boolean flag = false;
    private ArrayList Tharray;
    boolean flag1 = false;

    public ProcessConnection(Socket s, ArrayList Tharray) { // constructor
        client = s;

        try {
            is = new BufferedReader(new InputStreamReader
                                    (client.getInputStream()));
            os = new DataOutputStream(client.getOutputStream());
            this.Tharray = Tharray;
            Tharray.add(this);
        } catch (IOException e) {
            System.out.println("Exception: " + e.getMessage());
        }
        this.start();

//Tharray arrayet oprettes her i Server klassen

public class Server {

String keystore = "serverkeys";
char keystorepass[] = "hellothere".toCharArray();
char keypassword[] = "hiagain".toCharArray();
static public ArrayList iparray = new ArrayList();
static public ArrayList Tharray = new ArrayList();



når jeg så gerne vil i kontakt med den enkelte tråd , og kalde en metode skriver jeg

try{
  ProcessConnection kk = (ProcessConnection)Tharray.get(plas);
                kk.flag1 = true;
                while(kk.flag1){
                                 
                System.out.println("List4");
                ah = kk.Getshare();//kalder metode
                }
                System.out.println("list5");
                System.out.println(ah);
                return ah;
            }
            catch(Exception g){
                System.out.println(g.getMessage());
                return "nej";
            }

her er den metode der kaldes

public String Getshare(){
    String request = "aa";
    try{
     
       
    os.writeBytes("1223\n");
    os.flush();
    System.out.println("1223");
   
    }
    catch(Exception f){
        System.out.println(f.getMessage());
    }
    try{
            request = is.readLine();
    }
    catch(Exception g){
        System.out.println(g.getMessage());
    }
    flag1 = false;
    return request;
   
}


det mærkelige problem jeg har er så at der skrives fint til klienten med os.writeBytes("1223\n"); og dette modtages også i klienten men når klienten så skriver tilbage går det hele ned og jeg får her en Exception fra Serveren der fylder Socket Closed, det syntes jeg er lidt mærkeligt da jeg jo godt kan skrive til klienten, det er først når den skriver tilbage at det går alt :(

her skriver den tilbage

if (request.equals("1223")) {

      String[] s = Listfiles.fileslist();
      String names = "";
      for(int i = 0; i< s.length; i++) {
      names = names + "*" + s[i];
                              }

                  out.write(names.concat("\n"));
                  System.out.println(names);
                  out.flush();
                  request = "ah";


ps. det hele kører på sockets og jeg mener jeg har lavet noget ligende arne's post
http://www.eksperten.dk/spm/701837
Avatar billede arne_v Ekspert
04. maj 2006 - 16:52 #1
kan vi faa exception tekst og linien det sker i ?
Avatar billede arne_v Ekspert
04. maj 2006 - 16:53 #2
har ikke noget med problemet at goere, men jeg foreslaa PrintStream fremfor DataOutputStream
Avatar billede azazzs Nybegynder
04. maj 2006 - 17:00 #3
på Server siden er det her det sker
denne metode kaldes fra min ProcessConnection kk
kk.Getshare();

public String Getshare(){
    String request = "aa";
    try{
     
       
    os.writeBytes("1223\n");
    os.flush();
    System.out.println("1223");
   
    }
    catch(Exception f){
        System.out.println(f.getMessage());
    }
    try{
            request = is.readLine(); //det er her det sker :)
    }
    catch(Exception g){
        System.out.println(g.getMessage());
    }
    flag1 = false;
    return request;
   
}

ovre i klienten er det her

public void run(){

      while(true){
                      try{
                      request = in.readLine();
                      System.out.println(request+"det er det");




                          if (request.equals("1223")) {

                              String[] s = Listfiles.fileslist();
                              String names = "";
                              for(int i = 0; i< s.length; i++) {
                                  names = names + "*" + s[i];
                              }

                              out.write(names.concat("\n")); //det er her det sker i klienten:)
                              System.out.println(names);
                              out.flush();
                              request = "ah";




                              //System.out.println(Listfiles.fileslist());
                          } else {
                              System.out.println("ahhh#elfnl");

                          }
                      }
                  catch(Exception e){
                      System.out.println(e.getMessage());

              }

      }  }
Avatar billede azazzs Nybegynder
04. maj 2006 - 17:02 #4
og min Execption er Socked Closed

fra min debug
List3
List4
1223
Socket is closed
list5
aa
Exception: Socket is closed
Avatar billede azazzs Nybegynder
04. maj 2006 - 17:05 #5
efter dette sker står min klient bare og skriver null hele tiden på min input og går så ned, undskylder for min meget dårlige syntaks :)
Avatar billede azazzs Nybegynder
08. maj 2006 - 17:19 #6
så tager jeg dem da
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester