Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с TServerSocket и TClientSocket  (Прочитано 5053 раз)
0 Пользователей и 1 Гость смотрят эту тему.
elenatt
Интересующийся

ru
Offline Offline
Пол: Женский

« : 26-01-2010 17:22 » 

Подскажите , пожалуйста, как правильно нужно делать ?

Знаю, что очень глупый вопрос, но извините!!!)
Мне  передаю по сокету большой объем данных , допустим 100 МБ .  Я знаю , что данные нужно отпралять по частям, но не знаю, как правильно!

У меня примерно такой код на клиенте:

Код:
 
    char*  toSend = srv->getServiceString(count);
     int c = count/4000+1;
     int n = 0;
    for(int i = 0 ; i < c; i++)
    {
         int f = 4000;
         if( count - n < f)  f =  count - n ;
         sendBuf(toSend+i*4000,f);
         n+=f;
         Sleep(10);
     }

Как можно узнать получил ли сервер информацию?
Спасибо заранее за ответы!
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 26-01-2010 18:51 » 

пусть сервер проверит контрольную сумму (которая должна быть посчитана на клиенте до этого) и пришлёт ответ, который нужно дождаться после цикла отправки (синхронно) или который придёт потом (асинхронно)
Записан

elenatt
Интересующийся

ru
Offline Offline
Пол: Женский

« Ответ #2 : 27-01-2010 00:39 » 

Спасибо .
У меня такая проблема, что иногда буфер переполняется или не знаю, что происходит! В общем, есть ли смысл отправлять данные по частям? как-то контролироваать, какая информация получена сервером, а какая нет?
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 27-01-2010 07:55 » 

elenatt, смысл отправлять по частям есть Улыбаюсь Класс борланда я не знаю, я MFC-шник , но принципы должны быть одинаковые - все под одной виндой ходим ))
Кстати, TCP или UDP?

В тонкости не вдавался, но за один заход сокет может отправить что-то около 8192 байта  (8к). Иначе посылка разбивается на части (или вообще не шлётся - не помню), по этой причине нужно слать данные кусочками, скажем, по 1...4к , указывая в куске, сколько в нём данных, номер куска (если нужно), и ту же контрольную сумму не помешает. Приёмник должен понять, сколько ему нужно принять кусков и байтов вообще. И принимает, пока они приходят.  Если всё это делать синхронно, будет подвис приложения, если асинхронно - можно показать диалог с кнопкой отмены
« Последнее редактирование: 27-01-2010 10:03 от Алексей1153++ » Записан

elenatt
Интересующийся

ru
Offline Offline
Пол: Женский

« Ответ #4 : 27-01-2010 08:29 » 

Алексей1153++, TCP. Только таким образом, да?
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 27-01-2010 09:14 » 

на этом уровне абстракции - видимо, да Улыбаюсь Если неохота разбираться - то ищи готовые реализации. Для борладна их, думаю, навалом. Но если время есть, то лучше покопайся и разберись - занятно ))
Записан

elenatt
Интересующийся

ru
Offline Offline
Пол: Женский

« Ответ #6 : 27-01-2010 09:42 » 

 Понятно, спасибо.  Буду разбираться . Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines