Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 25 сен 2018, 12:00

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: обмен файлами по TCP
СообщениеДобавлено: 04 сен 2017, 16:26 

Зарегистрирован: 04 сен 2017, 15:48
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Есть рабочий клиент на андроид. 4 кнопки.
1.Установить соединение
2.Обмен данными.
3.Сохранить файлы
4.Закрыть соединение.
Помогите объединить эти процессы под одну кнопку.
Activity
Код: [ Загрузить ] [ Скрыть ]
  1. public class SyncActivity extends AppCompatActivity { 
  2.     private Button mButtonOpen  = null; 
  3.     private Button mButtonSend  = null; 
  4.     private Button mButtonGet  = null; 
  5.     private Button mButtonClose = null; 
  6.     private Button mButtonOpenF  = null; 
  7.     private Button mButtonSaveF = null; 
  8.     private Button mButtonOpenList = null; 
  9.     private TCPSocket mServer = null; 
  10.     private FilesApp mFiles = null; 
  11.     private TextView tvMessage; 
  12.     private String strMessage = ""; 
  13.     private String strData; 
  14.     private String strUser = "1111111"; 
  15.  
  16.  
  17.     @Override 
  18.     protected void onCreate(Bundle savedInstanceState) { 
  19.         super.onCreate(savedInstanceState); 
  20.         setContentView(R.layout.activity_sync); 
  21.  
  22.         mButtonOpen = (Button) findViewById(R.id.button_open_connection); 
  23.         mButtonSend = (Button) findViewById(R.id.button_send_connection); 
  24.         mButtonGet = (Button) findViewById(R.id.button_get_connection); 
  25.         mButtonClose = (Button) findViewById(R.id.button_close_connection); 
  26.         mButtonOpenF = (Button) findViewById(R.id.button_open_file); 
  27.         mButtonSaveF = (Button) findViewById(R.id.button_save_file); 
  28.         mButtonOpenList = (Button) findViewById(R.id.button_open_list); 
  29.         mButtonSend.setEnabled(false); 
  30.         mButtonGet.setEnabled(false); 
  31.         mButtonClose.setEnabled(false); 
  32.         tvMessage = (TextView) findViewById(R.id.textView_Message); 
  33.  
  34.         //scroll по TextView 
  35.         tvMessage.setMovementMethod(new ScrollingMovementMethod()); 
  36.  
  37.         //открываем соединение 
  38.         mButtonOpen.setOnClickListener(new View.OnClickListener() { 
  39.             @Override 
  40.             public void onClick(View v) { 
  41.                 connectServer(); 
  42.             } 
  43.         }); 
  44.  
  45.         //кнопка передаем и получаем данные 
  46.         mButtonSend.setOnClickListener(new View.OnClickListener() { 
  47.             @Override 
  48.             public void onClick(View v) { 
  49.                 sendFiles(); 
  50.                 getFiles(); 
  51.             } 
  52.         }); 
  53.  
  54.         //закрываем соединение 
  55.         mButtonClose.setOnClickListener(new View.OnClickListener() { 
  56.             @Override 
  57.             public void onClick(View v) { 
  58.                 /* Закрываем соединение */ 
  59.                 mServer.closeConnection(); 
  60.                 /* устанавливаем неактивными кнопки отправки и закрытия */ 
  61.                 mButtonSend.setEnabled(false); 
  62.                 mButtonGet.setEnabled(false); 
  63.                 mButtonClose.setEnabled(false); 
  64.                 strMessage = strMessage + "Соединение закрыто.\n"; 
  65.                 tvMessage.setText(strMessage); 
  66.             } 
  67.         }); 
  68.  
  69.         //сохраняем файл 
  70.         mButtonSaveF.setOnClickListener(new View.OnClickListener() { 
  71.             @Override 
  72.             public void onClick(View v) { 
  73.                 saveFiles(); 
  74.             } 
  75.         }); 
  76.  
  77.     //отправка файлов 
  78.     private void connectServer() { 
  79.         /* создаем объект для работы с сервером*/ 
  80.         mServer = new TCPSocket(); 
  81.         /* Открываем соединение. Открытие должно происходить в отдельном потоке от ui */ 
  82.         new Thread(new Runnable() { 
  83.             @Override 
  84.             public void run() { 
  85.                 try { 
  86.                     mServer.openConnection(); 
  87.                     /** 
  88.                      устанавливаем активные кнопки для отправки данных 
  89.                      и закрытия соедиения. Все данные по обновлению интерфеса должны 
  90.                      обрабатывается в Ui потоке, а так как мы сейчас находимся в 
  91.                      отдельном потоке, нам необходимо вызвать метод  runOnUiThread() 
  92.                      */ 
  93.                     runOnUiThread(new Runnable() { 
  94.                         @Override 
  95.                         public void run() { 
  96.                             mButtonSend.setEnabled(true); 
  97.                             mButtonGet.setEnabled(true); 
  98.                             mButtonClose.setEnabled(true); 
  99.                             strMessage = strMessage + "Соединение установлено.\n"; 
  100.                         } 
  101.                     }); 
  102.                 } catch (Exception e) { 
  103.                     strMessage = strMessage + "Ошибка соединения: " + e.getMessage() + "\n"; 
  104.                     mServer = null; 
  105.                 } 
  106.                 runOnUiThread(new Runnable() { 
  107.                     @Override 
  108.                     public void run() { 
  109.                         tvMessage.setText(strMessage); 
  110.                     } 
  111.                 }); 
  112.             } 
  113.         }).start(); 
  114.     } 
  115.  
  116.     //отправка файлов 
  117.     private void sendFiles() { 
  118.         if (mServer == null) { 
  119.             Log.e(mServer.LOG_TAG, "Сервер не создан"); 
  120.         } 
  121.         new Thread(new Runnable() { 
  122.             @Override 
  123.             public void run() { 
  124.                 try { 
  125.                     /* отправляем на сервер данные */ 
  126.                     String strFile = strUser + "<IDUser>" + 
  127.                             "<EOF>" + "\n"; 
  128.                     mServer.sendData(strFile.getBytes()); 
  129.                     strMessage = strMessage + "Файлы успешно отправлены." + "\n"; 
  130.                 } catch (Exception e) { 
  131.                     strMessage = strMessage + "Ошибка отправки файлов: " + e.getMessage() + "\n"; 
  132.                 } 
  133.                 runOnUiThread(new Runnable() { 
  134.                     @Override 
  135.                     public void run() { 
  136.                         tvMessage.setText(strMessage); 
  137.                     } 
  138.                 }); 
  139.             } 
  140.         }).start(); 
  141.     } 
  142.  
  143.     //получение файлов 
  144.     private void getFiles() { 
  145.         if (mServer == null) { 
  146.             Log.e(mServer.LOG_TAG, "Сервер не создан"); 
  147.         } 
  148.         new Thread(new Runnable() { 
  149.             @Override 
  150.             public void run() { 
  151.                 try { 
  152.                     /* получаем данные с сервера */ 
  153.                     strData = mServer.getData(); 
  154.                     strMessage = strMessage + "Файлы успешно получены.\n"; 
  155.                 } catch (Exception e) { 
  156.                     strMessage = strMessage + "Ошибка получения файлов: " + e.getMessage() + "\n"; 
  157.                 } 
  158.                 runOnUiThread(new Runnable() { 
  159.                     @Override 
  160.                     public void run() { 
  161.                         tvMessage.setText(strMessage); 
  162.                     } 
  163.                 }); 
  164.             } 
  165.         }).start(); 
  166.     } 
  167.  
  168.     private void saveFiles() { 
  169.         try { 
  170.             String fileNumber = "<EndFile>"; 
  171.             String[] splitFileNumber = strData.split(fileNumber); 
  172.             String fileName = "<Start>"; 
  173.             String[] splitFileName = splitFileNumber[0].split(fileName); 
  174.  
  175.             if (mFiles.writeFile(this, splitFileName[1], splitFileName[0]) == true) { 
  176.                 strMessage = strMessage + "Файл " + splitFileName[0] + " сохранен.\n"; 
  177.             } else { 
  178.                 strMessage = strMessage + "Ошибка. Файл " + splitFileName[0] + " не сохранен.\n"; 
  179.             } 
  180.             tvMessage.setText(strMessage); 
  181.  
  182.         } catch (Throwable t) { 
  183.             strMessage = strMessage + "Ошибка сохранения файла: " + t.toString(); 
  184.         } 
  185.         tvMessage.setText(strMessage); 
  186.     } 
  187.  
  188.  

класс TCPSocket
Код: [ Загрузить ] [ Скрыть ]
  1. public class TCPSocket { 
  2.     public static final String LOG_TAG = "myServerApp"; 
  3.     // ip адрес сервера, который принимает соединения 
  4.     private String mServerName = "11.11.11.11"; 
  5.     // номер порта, на который сервер принимает соединения 
  6.     private int mServerPort = 11111; 
  7.     // сокет, через которий приложения общается с сервером 
  8.     private Socket mSocket = null; 
  9.  
  10.     public TCPSocket() {} 
  11.  
  12.  
  13.     /** Открытие нового соединения. Если сокет уже открыт, то он закрывается. 
  14.      * @throws Exception 
  15.      * Если не удалось открыть сокет */ 
  16.     public void openConnection() throws Exception { 
  17.         /** Освобождаем ресурсы */ 
  18.         closeConnection(); 
  19.         try { 
  20.             /** Создаем новый сокет. Указываем на каком компютере и порту запущен наш процесс, 
  21.              который будет принамать наше соединение. */ 
  22.             mSocket = new Socket(mServerName,mServerPort); 
  23.         } catch (IOException e) { 
  24.             throw new Exception("Невозможно создать сокет: "+e.getMessage()); 
  25.         } 
  26.     } 
  27.  
  28.     /** Метод для закрытия сокета, по которому мы общались. */ 
  29.     public void closeConnection() { 
  30.         /** Проверяем сокет. Если он не зарыт, то закрываем его и освобдождаем соединение.*/ 
  31.         if (mSocket != null && !mSocket.isClosed()) { 
  32.             try { 
  33.                 mSocket.close(); 
  34.             } catch (IOException e) { 
  35.                 Log.e(LOG_TAG, "Невозможно закрыть сокет: " + e.getMessage()); 
  36.             } finally { 
  37.                 mSocket = null; 
  38.             } 
  39.         } 
  40.         mSocket = null; 
  41.     } 
  42.  
  43.     /** Метод для отправки данных по сокету. 
  44.      * @param data 
  45.      * Данные, которые будут отправлены 
  46.      * @throws Exception 
  47.      * Если невозможно отправить данные */ 
  48.     public void sendData(byte[] data) throws Exception { 
  49.         /** Проверяем сокет. Если он не создан или закрыт, то выдаем исключение */ 
  50.         if (mSocket == null || mSocket.isClosed()) { 
  51.             throw new Exception("Невозможно отправить данные. Сокет не создан или закрыт"); 
  52.         } 
  53.         /** Отправка данных */ 
  54.         try { 
  55.             mSocket.getOutputStream().write(data); 
  56.             mSocket.getOutputStream().flush(); 
  57.         } catch (IOException e) { 
  58.             throw new Exception("Невозможно отправить данные: "+e.getMessage()); 
  59.         } 
  60.     } 
  61.  
  62.     /** Метод для получения данных по сокету. 
  63.      * Данные, которые будут получены 
  64.      * @throws Exception 
  65.      * Если невозможно получить данные */ 
  66.     public String getData() throws Exception { 
  67.         /** Проверяем сокет. Если он не создан или закрыт, то выдаем исключение */ 
  68.         if (mSocket == null || mSocket.isClosed()) { 
  69.             throw new Exception("Невозможно получить данные. Сокет не создан или закрыт"); 
  70.         } 
  71.         try { 
  72.             /** получение данных */ 
  73.             BufferedReader br = new BufferedReader( 
  74.                     new InputStreamReader(mSocket.getInputStream())); 
  75.             String line; 
  76.             StringBuilder builder = new StringBuilder(); 
  77.             while ((line = br.readLine()) != null) { 
  78.                 builder.append(line + "\n"); 
  79.             } 
  80.             String msg = builder.toString(); 
  81.             return msg; 
  82.         } catch (IOException e) { 
  83.             throw new Exception("Невозможно получить данные: "+e.getMessage()); 
  84.         } 
  85.     } 
  86.  
  87.     @Override 
  88.     protected void finalize() throws Throwable { 
  89.         super.finalize(); 
  90.         closeConnection(); 
  91.     } 
  92.  

класс FilesApp
Код: [ Загрузить ] [ Скрыть ]
  1. public class FilesApp { 
  2.     public FilesApp() {} 
  3.  
  4.     public static boolean writeFile(Context context, String strContent, String fileName) { 
  5.         boolean bReturn = true; 
  6.         OutputStreamWriter osw = null; 
  7.         try { 
  8.             // ?????? 
  9.             osw = new OutputStreamWriter(context.openFileOutput(fileName, context.MODE_PRIVATE)); 
  10.             osw.write(strContent); 
  11.             osw.flush(); 
  12.         } catch (Exception e) { 
  13.             e.printStackTrace(); 
  14.             bReturn = false; 
  15.         } finally { 
  16.             try { 
  17.                 osw.close(); 
  18.             } catch (IOException e) { 
  19.                 e.printStackTrace(); 
  20.             } 
  21.         } 
  22.         return bReturn; 
  23.     } 
  24.  
  25.     public static String readFile(Context context, String fileName) { 
  26.         String strValue = null; 
  27.         File file = context.getFileStreamPath(fileName); 
  28.         if (file.exists()) { 
  29.             StringBuilder sb = new StringBuilder(); 
  30.             BufferedReader bufferReader = null; 
  31.             try { 
  32.                 // ?????????????buffer?? 
  33.                 bufferReader = new BufferedReader(new InputStreamReader( 
  34.                         context.openFileInput(fileName))); 
  35.                 String strLine = null; 
  36.                 while ((strLine = bufferReader.readLine()) != null) { 
  37.                     sb.append(strLine); 
  38.                 } 
  39.  
  40.             } catch (Exception e) { 
  41.                 e.printStackTrace(); 
  42.             } finally { 
  43.                 try { 
  44.                     bufferReader.close(); 
  45.                 } catch (IOException e) { 
  46.                     e.printStackTrace(); 
  47.                 } 
  48.             } 
  49.             strValue = sb.toString(); 
  50.         } 
  51.         return strValue; 
  52.     } 
  53.  


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB