Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
7 / 7 / 2
Регистрация: 27.05.2013
Сообщений: 59

Socket соединение между ПК и Планшетом и передача данных

07.08.2013, 11:51. Показов 3557. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Создаю socket соединение между ПК и планшетом:
ПК - программа сервер (программа написана на Delphi - используется компонент TServerSocket)
планшет - программа клиент

Программа сервер должна отсылать данные (текст, картинки и тд) клиенту при подключении. Реализовали так:
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
var
  Size: integer;
  buf : Pointer;
begin
  Memo1.Lines.Add('Соединение установлено');
  FS := TFileStream.Create('C:\soft\1.txt', fmOpenRead);
  ServerSocket1.Socket.Connections[0].SendStream(FS);
end;
Клиентская часть:
Java
1
2
3
4
5
6
7
8
9
10
try {
    Thread thread = new Thread(new Runnable() {
        public void run() {
            socket = new Socket("127.0.0.1", 8888);
            ...
        }
    });
    thread.start();
} catch (Exception e) {
}
Соединение проходит. Ок.
А как считать данные в цикле, которые приходят на клиент порциями??
Господа, я новичок в программировании под Android, помогите дописать цикл считывания данных
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.08.2013, 11:51
Ответы с готовыми решениями:

Соединение с сервером, передача данных
Добрый вечер. Такой вопрос: есть некая программа - сервер, написанная на С++ Qt. Там пара вкладок на ней пара ползунков. Это набросок,...

socket http передача данных
Всем привет, ребята помогите пожалуйста. Нужно написать программу которая будет обмениваться данными с сервером + с возможностью передавать...

Передача данных по сети (TCP, Socket)
Никак не могу понять в каком именно месте ошибка. С клиента на сервер передаются данные. Сначала название будущего файла, а затем строка...

4
 Аватар для MegaSinner
99 / 95 / 9
Регистрация: 09.04.2010
Сообщений: 746
07.08.2013, 14:13
прочитай мой ответ здесь
Удачи.
1
7 / 7 / 2
Регистрация: 27.05.2013
Сообщений: 59
08.08.2013, 08:57  [ТС]
Там по твоему коду, я так понял, считывается 1024 байта.
А если файл большой то его тоже целиком считывать? Точно не в цикле порциями нужно считывать?
0
24 / 24 / 1
Регистрация: 04.02.2013
Сообщений: 132
Записей в блоге: 1
08.08.2013, 11:55
вот я так получаю данные. вначале ставлю задержку в 2с чтобы данные пришли в сокет, иначе один пакет прочитает и вывалиЦа. конечно, это не совсем правильно, нужно чтобы клиент и сервер передавали данные порциями. клиент получил порцию данных и сообщает серверу чтобы тот давал сл. и так пока все не передадут. это гарантирует что все данные придут. и кстати, господа эксперты. посмотрев мой код, какие есть советы по улучшению?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
    private void backgroundListening()
    {           
        long tS =  System.currentTimeMillis();
        try 
        {
            int len;
            inp = soc.getInputStream();
            Context context = getApplicationContext();
            incomData = new byte[0];
            boolean isReaded = false;
            boolean isDemen = false;
            boolean isSended = false;
            byteTransfered=0;
            soc.setReceiveBufferSize(Integer.MAX_VALUE);
            while(isRcvData)
            {                                           
                Log.d("DURATION_WAIT", String.valueOf(System.currentTimeMillis()-m_globalstartTime));
                isSended = false;
                byte bufin[] = new byte[1];                                                                                             
                                
                while((len=inp.read(bufin)) !=-1)               
                {
                    Log.d("DURATION_RECEIVE", String.valueOf(System.currentTimeMillis()-m_globalstartTime));                    
                    isReaded=false;                 
                    if(!isDemen)
                    {                                               
                        try {
                            listenThread.sleep(2000);
                        } catch (InterruptedException e) {                          
                            e.printStackTrace();
                        }
                        
                        incomData= new byte[inp.available()];                                           
                    }                                                               
                    
                    if(!isReaded)
                    {
                        inp.read(incomData);                                             
                        incomData= Tools.ConcatArray(incomData, bufin);                                                                         
                        isDemen = true; 
                        String ms= String.valueOf(byteTransfered)+" Available: "+ String.valueOf(inp.available());
                        Log.d("BYTE READ:", ms);
                        byteTransfered++;                       
                    }
                                        
                    if(inp.available()==0)
                    {                       
                        m_rcvMessage = new String(incomData);                       
                        handler.post(doUpdateGUI);
                        isReaded= true;
                        byteTransfered=0;
                        isDemen=false;                              
                    }
                } 
                                    
                if (inp.available()==0)
                {
                    if(isReaded)
                        isRcvData=false;
                }
            }
        } 
        catch (IOException e) 
        {           
            Log.e("IO ERROR:", e.getMessage() );
            //Toast.makeText(getApplicationContext(), "IO ERROR: "+ e.getMessage(), Toast.LENGTH_SHORT).show();
        }
        catch (Exception ex) 
        {
                    
            Log.e("IO ERROR 2:", ex.getMessage() );
            //Toast.makeText(getApplicationContext(), "IO ERROR 2: "+ ex.getMessage(), Toast.LENGTH_SHORT).show();
        }       
        long tE = System.currentTimeMillis();
        
        long resultT= tE-tS;
        
        Log.d("DURATION INCOM", String.valueOf(resultT));
        }
1
7 / 7 / 2
Регистрация: 27.05.2013
Сообщений: 59
09.08.2013, 13:47  [ТС]
На основе Вашего кода написал вот что:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public int Convert4BytesToInteger(byte[] b) {    
    int MASK = 0xFF;
    int result = 0;
 
    result = b[0] & MASK;
    result = result + ((b[1] & MASK) << 8);
    result = result + ((b[2] & MASK) << 16);
    result = result + ((b[3] & MASK) << 24);
        
    return result;
}
 
protected int Recv() {
    ByteArrayOutputStream zipBAOS = new ByteArrayOutputStream();
    int iTotalBytesReceived = 0;        
        
    try {
        byte[] bLength = new byte[4];
        is.read(bLength, 0, 4); //принимаем размер архива (integer = 4 байта)     
        int iLength = Convert4BytesToInteger(bLength);
            
        if (iLength > 0) {          
            while (iTotalBytesReceived < iLength) {
                int iAvailableBytes = is.available();
                if (iAvailableBytes != 0) {
                    byte[] buffer = new byte[iAvailableBytes];      
                    is.read(buffer, 0, iAvailableBytes);
                    zipBAOS.write(buffer);                  
                    iTotalBytesReceived = iTotalBytesReceived + iAvailableBytes;
                }
            }
        }           
    } catch (Exception e) {
    }           
 
 
    try {
        InputStream zipIS = new ByteArrayInputStream(zipBAOS.toByteArray());            
        ZipInputStream ZIS = new ZipInputStream(zipIS);
            
        ZipEntry entry;     
        while ((entry = ZIS.getNextEntry()) != null) { //перебор и распаковка всех файлов в архиве
            long iFileSize = entry.getSize();
                
            System.out.println("entry: " + entry.getName() + ", " + iFileSize);  
    
            ByteArrayOutputStream unzipBAOS = new ByteArrayOutputStream();              
            byte[] buffer = new byte[1024];
                
            int len;    
            while ((len = ZIS.read(buffer)) > 0) {
                unzipBAOS.write(buffer, 0, len);
            }
            //String str = new String(unzipBAOS.toString("Cp1251"));
        }
    } catch (Exception e) {
    }
        
    return iTotalBytesReceived;
}
тут принимается поток данных (подразумевается zip архив) и сразу идёт распаковка...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2013, 13:47
Помогаю со студенческими работами здесь

Передача данных через socket TCP/IP
Доброе время суток. Можете помочь в подборе какой то стоящей информации или показать/рассказать как делается данное задание (выдали на...

Python Tornado Socket Server Передача данных
Приветствую всех, в общем такой вопрос, создал я сокет сервер на торнадо в питоне (Ubuntu), подключаюсь к нему через телнет в винде, пишу...

Передача данных по TCP IP (Socket) от устройства к девайсу по вайфай
Ищу человека который разбираеться в передаче данных по сокету для iOs устройств , либо очет научиться в этом разбираться Для Android уже...

Соединение и передача данных по модему.
Как сделать так, чтобы можно было соединится по модему и передовать данные...

Передача ссылки в конструктор (передача данных между формами)
Из темы &quot;Ответы на 7 самых частых вопроса по WinForms&quot; Реализовал метод № 2.3 без проблем, а вот 2.4 не получается( вот текст из той...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru