Фоновое управление движением в Android - PullRequest
0 голосов
/ 06 июня 2019

Я разрабатываю приложение для Android, которое собирает некоторые данные с 4-х датчиков через Bluetooh и в конце отправляет данные на SFTP-сервер. Я использую JSCh (ChannelSftp), эта штука отлично работает с некоторыми серверами, но с сервером моего университета происходит сбой приложения. Я провел глубокую отладку с ИТ-специалистом, и мы обнаружили, что как только канал SSH открыт, на сервер поступает некоторый фоновый трафик (например: myIP --- otherIP --- пакет). В этот момент брандмауэр закрывает соединение и происходит сбой приложения.

Есть ли способ заблокировать фоновый трафик в течение небольшого промежутка времени из приложения? У кого-нибудь была такая же проблема, как у меня?

Заранее спасибо

public class SftpClass extends AsyncTask <Object, Void, String> {


    private Context context;
    private long size;
    private long fileSize;

    public SftpClass (Context con){
        context = con;
        size = 0;
        fileSize = -1;
    }


    @Override
    protected String doInBackground(Object... params){
        //Params: File file, String host, String port, String username, String password
        File file = (File) params[0];
        String host = (String) params[1];
        String port = (String) params[2];
        String username = (String) params[3];
        String password = (String) params[4];
        String path = (String) params[5];

        int portnumber = Integer.valueOf(port);

        fileSize = file.length();
        String localFilePath = file.getAbsolutePath();
        String fileName = localFilePath.substring(localFilePath.lastIndexOf("/") + 1);
        String remoteFilePath =  fileName;  

        JSch jsch = new JSch();
        Session session = null;
        try {
            session = jsch.getSession(username, host, portnumber);
            session.setConfig("StrictHostKeyChecking", "no");
            session.setPassword(password);
            session.connect();

            Channel channel = session.openChannel("sftp");

            channel.connect();
            final ChannelSftp sftpChannel = (ChannelSftp) channel;
            sftpChannel.put(localFilePath, path+remoteFilePath);

            try
            {
                Thread.sleep(3000);
            }
            catch(InterruptedException ex)
            {
                Thread.currentThread().interrupt();
            }

            SftpATTRS attrs = null;
            try {
                attrs = sftpChannel.lstat(path+remoteFilePath);
            } catch (SftpException e) {
                e.printStackTrace();
            }
            if ( attrs != null){
                size = attrs.getSize();
            }

            sftpChannel.exit();
            session.disconnect();
        } catch (JSchException e) {
            e.printStackTrace();
        } catch (SftpException e) {
            e.printStackTrace();

        }
        return "";
    }

    @Override
    protected void onPostExecute(String result) {
        if (size == fileSize){
            Toast.makeText(context, "File uploaded\n"+Long.toString(size)+"Bytes", Toast.LENGTH_SHORT).show();
        }
    }
}
...