|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.05.2012, 14:30 | #11 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
Покажи код, где ты принимаешь строки.
"ковыряю изнутри" (с)
|
19.05.2012, 17:38 | #12 |
Форумчанин
Регистрация: 24.02.2010
Сообщений: 148
|
1 пост
Так вроде все написал в 1 посте ! Или что то ещё ?
|
19.05.2012, 18:38 | #13 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
Функции recv() что-то не видно, где принимаете данные из сокета?
"ковыряю изнутри" (с)
|
19.05.2012, 22:43 | #14 |
Форумчанин
Регистрация: 24.02.2010
Сообщений: 148
|
Да прости это я невнимателен
В потоке Connect ! И соответственно прием данных и передача на ReceiveData(Socket: TSocket; Buffer: PByte);
Код:
Последний раз редактировалось fucil; 19.05.2012 в 22:54. |
19.05.2012, 23:09 | #15 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
имхо, у вас типичная ошибка. Вы считаете, что клиент всегда получит данные теми же порциями, какими они были отправлены с сервера. Это не так. TCP -- это поток данных, на клиент они могут попасть любыми порциями.
Например, сервер отправляет строку "POST|Тут много данных" одной порцией. На клиент это может прийти в виде 3-х пакетов (понадобится 3 вызова recv() ): 1) "POS" 2) "T|Тут мн" 3) "ого данных" Пример утрированный, но при больших объёмах так оно и работает. Т.е. клиент должен собрать все данные, а потом уже их разбирать. Ну или не все, но хотя бы понимать, в какой позиции потока данных он находится. У вас же ReceiveData() каждый раз начинает жизнь "с нуля". > что приходят не все строки, не всегда но очень часто (пропадают, недожодят)! TCP не теряет ни одного переданного бита. Максимум, что может потеряться, это соединение
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 19.05.2012 в 23:30. |
19.05.2012, 23:31 | #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. |
20.05.2012, 00:15 | #17 |
Форумчанин
Регистрация: 24.02.2010
Сообщений: 148
|
??
По поводу veniside У вас же ReceiveData() каждый раз начинает жизнь "с нуля".
Да но такой же метод и на сервере, и все гуд: как часы ( А вот как посоветовал 3D Hunter пробовал, так у меня вообще ничего не приходит тогда. Я тут вот что подумал, так как у tcp данные не теряются, а только подключение, то может все таки у меня просто большой слип, перед переподкл ??? Код:
Последний раз редактировалось fucil; 20.05.2012 в 00:24. |
20.05.2012, 00:44 | #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 |