Keine Antwort



  • Hi, ich habe da einen kleinen Server geschrieben und auch eine Anwendung, die mit ihm kommuniziert, ich sende mit der Anwendung eine Anfrage zum Server, der reagiert auch und führt die gewünschte Operation aus, ich überprüfe das über Ausgaben auf der Kommandozeile. Also er öffnet eine Datei und schreib sie in seinen OutputSream, jedoch kommt nichts bei meiner Client-Anwendung an.

    Textausschnitt vom client:

    else {
                try {
                Socket socket = new Socket(host, port);
                PrintStream out = new PrintStream(socket.getOutputStream());
                out.print(cmd + "\r\n");
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                String line = "";
                String con = "";
                long stime = System.currentTimeMillis();
                long ntime = 0;
                while (!in.ready()) {
                    ntime = System.currentTimeMillis();
                    if ((ntime - stime) >= timeOut) {
                        output.append("Keine Antwort vom Server....");
                        return;
                    }
                }
                while ((line = in.readLine()) != null) {
                    con += line + "\r\n";
                    output.append(line + "\n");
                    System.out.println("read line");
                }
                /*
                if (outputFile != null && con != null) {
                    BufferedWriter w = new BufferedWriter(new  FileWriter(outputFile, false));
                    w.write(con, 0, con.length());
                    w.close();
                }
                */
                out.close();
                in.close();
                socket.close();
                } catch (IOException e) {
                    output.append("\n"+e.toString()+"\n");
                }
            }
    

    und vom Server:

    import java.io.*;
    import java.net.*;
    import java.util.*;
    
    public class ClientThread extends Thread {
    
        Socket socket;
        String error;
        PrintStream out;
        BufferedReader in;
        BufferedInputStream is;
        BufferedOutputStream os;
    
        public ClientThread(Socket socket) {
    
            this.socket = socket;
        }
    
        public final void run() {
    
            try {
                System.out.println("incoming call...");
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                out = new PrintStream(socket.getOutputStream());
                String cmd;
                while (!in.ready());
                cmd = in.readLine();
                boolean cont = checkRequest(cmd);
                if (cont) {
    
                } else {
                    out.print(error);
                    in.close();
                    out.close();
                    socket.close();
                    return;
                }
                processRequest(cmd);
                in.close();
                is.close();
                out.close();
                os.close();
                socket.close();
                System.out.println("connection closed...");
            } catch (IOException e) {
                System.out.println(e.toString());
            } 
         }
    
         private final void processRequest(String cmd) throws IOException, FileNotFoundException {
    
             if (cmd.startsWith("GET")) {
                 StringTokenizer str = new StringTokenizer(cmd, " ");
                 String s = str.nextToken();
                 s = str.nextToken();
                 String t;
                 int a = -1;
                 is = new BufferedInputStream(new FileInputStream(s));
                 os = new BufferedOutputStream(socket.getOutputStream());
                 while ((a = is.available()) == 0);
                 int size = 0;
                 while (true) {
                     byte[] buffer = new byte[a];
                     size = is.read(buffer, 0, a);
                     if (size < 0) break;
                     if (size < a) {
                         byte[] buffer2 = new byte[size];
                         System.arraycopy(buffer, 0, buffer2, 0, size);
                         buffer = buffer2;
                     }
                     os.write(buffer, 0, buffer.length);
                 }
             } else if (cmd.startsWith("SEND")) {
                 StringTokenizer str = new StringTokenizer(cmd, " ");
                 String s = str.nextToken();
                 str = new StringTokenizer(s, "/");
                 String s2 = "";
                 while (str.hasMoreTokens()) s2 = str.nextToken();
                 Download d = new Download(s, s2, socket);
                 d.getViewer().setVisible(true);
                 d.start();
             }
         }
    
         private final boolean checkRequest(String cmd) {
    
             StringTokenizer str = new StringTokenizer(cmd, " ");
             int i = 0;
             String t;
             while (str.hasMoreTokens()) {
                 t = str.nextToken();
                 ++i;
             }
             boolean acceptedCmd = (cmd.startsWith("GET") || cmd.startsWith("SEND"));
             if (acceptedCmd && i == 2) {
                 return true;
             } else if (acceptedCmd && i != 2) {
                 error = "cmd syntax: <cmd> <file>";
                 return false;
             } else {
                 error = "unknown command";
                 return false;
             }
         }
    }
    

    Ich weiß einfach nicht warum ich keine Antwort kriege, die while beim client läuft volle 10 Sekunden und es ist nichts lesbar.



  • Ok, Problem erkannt, ... Problem beseitigt. 😃


Anmelden zum Antworten