Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2012, 21:27   #1
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание сокеты неприходят все строки

Есть некий сервер в котором есть скажим мемо1 в котором есть список строк допустим их 100 или 200 так вот нужно их передать клиенту.
Вкратце чтобы иметь представление о типе сокетов.
Код:
  WSAStartup($0202, wsaData);

  hServer := Socket(AF_INET, SOCK_STREAM, 0);
  sAddr.sin_family      := AF_INET;
  sAddr.sin_port        := htons(wPort);
  sAddr.sin_addr.S_addr := INADDR_ANY;
  Bind(hServer, sAddr, SizeOf(sAddr));
1) Отсылаю клиенту количество строк, содержащее мемо1 допустим 100.
2 Беру 1 строку с мемо1 и отсылаю ставлю sleep(300); (если убрать или поставить меньше то % потери строк увеличится)
Сама процедура передачи данных клиенту.

Код:
procedure TClient.SendData(Data: String);
begin
  Send(hSocket, Data[1], Length(Data), 0);
end;
-----------------Клиентом-----------------
Прием данных клиента

Код:
procedure TFrmMain.ReceiveData(Socket: TSocket; Buffer: PByte);
var
  Data: String;
  strArr: TDynStringArray;
begin
 //Convert our data to a string and trim it
  Data := String(Buffer);
  Data := Trim(Data);

  if Length(Data) > 0 then
  begin
    //Setup our dynamic array structure
    StrArr := Explode('|', Data); //динамический массив, разбивающий сплошную строку на подстроки, тем самым отфильтровываю команды сервера от контекста.

  if StrArr[0] = 'POST' then begin
  //тут добавляем в ComboBox1 строки
end;
1) Принимает кол строк, и уже знает сколько их должно прийти.
после
2) получает 1 строку и добавляет ее в ComboBox1 и так далее до (кол строк которое мы знаем, так как 1 делом мы получали число строк) конца строк.

Суть проблемы в том: что приходят не все строки, не всегда но очень часто (пропадают, недожодят)!

Что вы посоветуете мне в этом случае !
fucil вне форума Ответить с цитированием
Старый 17.05.2012, 21:44   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Отсылать весь текст в Memo за раз не вариант?
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 17.05.2012, 22:35   #3
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
По умолчанию ДА я тоже так хотел!

Не хочет чего-то он весь отсылаться ! с клиента на сервер можно большой, а с сервера на клиент большой не приходит, не знаю почему, все проверил хз !
fucil вне форума Ответить с цитированием
Старый 17.05.2012, 22:42   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Для начала выкиньте
Код:
sleep(300);
и используйте таймер!
Цитата:
Наверно, имеется ввиду TTimer
Именно
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 18.05.2012 в 04:48.
Mad_Cat вне форума Ответить с цитированием
Старый 18.05.2012, 00:24   #5
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
По умолчанию хм ?

Спасибо за совет, но я не пойму про какой вы таймер говорите, можно по подробнее и если можно то пример !
fucil вне форума Ответить с цитированием
Старый 18.05.2012, 02:33   #6
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Наверно, имеется ввиду TTimer
Shouldercannon вне форума Ответить с цитированием
Старый 18.05.2012, 07:21   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Что вы посоветуете мне в этом случае !
У классических сокетов есть такая болячка.
Мне кажется автору стоит взять библиотеки или компоненты, где расклейка пакетов уже решена. Я например пользуюсь Индейцами, и не страдаю даже от пересыла гига информации через Stream.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.05.2012, 16:48   #8
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
По умолчанию Чем труднее дорога тем интереснее !

Нет ! Только сокеты они гибкие и тд.
fucil вне форума Ответить с цитированием
Старый 18.05.2012, 19:19   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Чем труднее дорога тем интереснее !
Чем труднее тем больше вероятность натыкать тактических ошибок в программу, которые всплывут в самый неожиданный момент, когда техподдержки не будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.05.2012, 14:06   #10
fucil
Форумчанин
 
Регистрация: 24.02.2010
Сообщений: 148
Восклицание Будит время будит решение

Как не крути сокеты рулят! И все же отошли от темы, проблема все ещё не решена !
Прошу помощи экспертов
fucil вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять все строки местами inessam Microsoft Office Excel 8 14.04.2011 10:15
Выбрать все числа из строки Jene4ka Общие вопросы Delphi 7 17.03.2011 07:13
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, Шпунюся Помощь студентам 1 16.12.2010 21:02
Из строки удалить все цифры. Shnurik_sh Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 24.11.2010 01:17
Удалит все строки! sanek_next Помощь студентам 0 11.10.2010 21:10