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

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

07.08.2013, 11:51. Показов 3527. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru