Не могу передать файл

250
11 ноября 2017, 11:18

Клиент

try {
    if(socket == null) {
        socket = new Socket(ip, 6666);
        sin = socket.getInputStream();
        sout = socket.getOutputStream();
        in = new DataInputStream(sin);
        out = new DataOutputStream(sout);
    }
    if(socket.isConnected()) {
        out.writeUTF(command);
        out.flush();
        line = in.readUTF();
        if(line == "getScreen") {
            try {
                long s;
                Context ctx= null;
                s = Long.parseLong(in.readLine());
                File f = null;
                byte[] byteArray = new byte[1024];
                FileOutputStream fos = new FileOutputStream(f);
                fos = ctx.openFileOutput("Screen.bmp", Context.MODE_PRIVATE);
                int sp = (int)(s / 1024);
                if (s % 1024 != 0) sp++;
                BufferedInputStream bis = new BufferedInputStream(sin);
                while (s > 0) {
                    int i = bis.read(byteArray);
                    fos.write(byteArray, 0, i);
                    s-= i;
                    return null;
                }
                fos.close();
            } catch (IOException e) {
            }
        }
        return line.toString();
    } else {
        throw new Exception("Socket not alive!");
    }
} catch(Exception ex) {
     return ex.toString();
}

Сервер

public static void run(File f, Socket clientDialog) {
    Runnable r = new Runnable() {
        public void run() {
            System.out.println("Sending " + f.getName() + "...");
            try {
                byte[] byteArray = new byte[1024];
                FileInputStream fis = new FileInputStream(f.getPath());
                long s;
                s = f.length();
                int sp = (int)(s / 1024);
                if (s % 1024 != 0) sp++;
                BufferedOutputStream bos = new BufferedOutputStream(clientDialog.getOutputStream());
                Thread.sleep(500);
                while (s > 0) {
                    int i = fis.read(byteArray);
                    bos.write(byteArray, 0, i);
                    s-= i;
                }
                bos.flush();
                fis.close();
            } catch (FileNotFoundException e) {
                System.err.println("File not found!");
            } catch (IOException e) {
                System.err.println("IOException "+e);
            } catch (Exception e) {
            }
        }
    };
    new Thread(r).start();
}
Answer 1

по делу:

while (s > 0) {
   int i = bis.read(byteArray);
   fos.write(byteArray, 0, i);
   s-= i;
   return null;
}

зачем здесь return null;, если это ошибка исправьте, если нет объясните, я не понимаю зачем 1 разовый цикл.

Из критики по коду:

  • начните давать нормальные имена переменным
  • удаляйте неиспользуемый код:

    int sp = (int)(s / 1024);
    if (s % 1024 != 0) sp++;

    на сервере это нигде не используется.

    long s; s = f.length(); это можно написать в 1 строку long s = f.length();

  • для ресурсов используйте try-with-resources или try-finally

READ ALSO
вложенные циклы (вызов прямой и обратной последовательности)

вложенные циклы (вызов прямой и обратной последовательности)

Здравствуйте, людиподскажите новичку по вложенным циклам

363
Множественный выбор чеков

Множественный выбор чеков

Есть меню и там группа с чекбоксамиМогу пометить один потом меню исчезает

285
inconsistent java and sql object types

inconsistent java and sql object types

Есть типы в БД:

759
Разделить данные по блокам в Gridview

Разделить данные по блокам в Gridview

Всем доброго времени сутокВывожу все данные с таблицы БД в Gridview

223