![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
![]()
Покажи код, где ты принимаешь строки.
"ковыряю изнутри" (с)
|
![]() |
![]() |
![]() |
#12 |
Форумчанин
Регистрация: 24.02.2010
Сообщений: 148
|
![]()
Так вроде все написал в 1 посте ! Или что то ещё ?
|
![]() |
![]() |
![]() |
#13 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
![]()
Функции recv() что-то не видно, где принимаете данные из сокета?
"ковыряю изнутри" (с)
|
![]() |
![]() |
![]() |
#14 |
Форумчанин
Регистрация: 24.02.2010
Сообщений: 148
|
![]()
В потоке Connect ! И соответственно прием данных и передача на ReceiveData(Socket: TSocket; Buffer: PByte);
Код:
Последний раз редактировалось fucil; 19.05.2012 в 22:54. |
![]() |
![]() |
![]() |
#15 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
имхо, у вас типичная ошибка. Вы считаете, что клиент всегда получит данные теми же порциями, какими они были отправлены с сервера. Это не так. TCP -- это поток данных, на клиент они могут попасть любыми порциями.
Например, сервер отправляет строку "POST|Тут много данных" одной порцией. На клиент это может прийти в виде 3-х пакетов (понадобится 3 вызова recv() ): 1) "POS" 2) "T|Тут мн" 3) "ого данных" Пример утрированный, но при больших объёмах так оно и работает. Т.е. клиент должен собрать все данные, а потом уже их разбирать. Ну или не все, но хотя бы понимать, в какой позиции потока данных он находится. У вас же ReceiveData() каждый раз начинает жизнь "с нуля". > что приходят не все строки, не всегда но очень часто (пропадают, недожодят)! TCP не теряет ни одного переданного бита. Максимум, что может потеряться, это соединение ![]()
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 19.05.2012 в 23:30. |
![]() |
![]() |
![]() |
#16 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
![]()
Посмотри внимательно сишный пример из МСДНа:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx При создании сокета 3м параметром указывай IPPROTO_TCP вместо нуля. И может быть следует переписать кусок кода так: Код:
"ковыряю изнутри" (с)
Последний раз редактировалось 3D Hunter; 19.05.2012 в 23:36. |
![]() |
![]() |
![]() |
#17 |
Форумчанин
Регистрация: 24.02.2010
Сообщений: 148
|
![]()
По поводу veniside У вас же ReceiveData() каждый раз начинает жизнь "с нуля".
Да но такой же метод и на сервере, и все гуд: как часы ( А вот как посоветовал 3D Hunter пробовал, так у меня вообще ничего не приходит тогда. Я тут вот что подумал, так как у tcp данные не теряются, а только подключение, то может все таки у меня просто большой слип, перед переподкл ??? Код:
Последний раз редактировалось fucil; 20.05.2012 в 00:24. |
![]() |
![]() |
![]() |
#18 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
![]()
вам посоветовали правильную вещь -- собирать все данные, перед их парсингом. А вы продолжаете какие-то слипы менять. В вашей программе вобще не нужны Sleep(), у вас send() и recv() блокирующие, а значит, они сами разберутся, сколько им ждать.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поменять все строки местами | 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 |