Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

Проблема с блок. сокетами!!!!   Найти похожие ветки 

 
SidDN   (2003-09-10 17:29) [40]

> Verg

Можно по-подробнее...


 
Verg   (2003-09-10 17:35) [41]


> Можно по-подробнее...

Там более подробно некуда

Давай лучше поищем "ведьм" :)


> SetLength (TMP, nRead1);
> // Определяем размер данных
> SetLength(s1, StrLen(PChar(TMP))+1);

Объясни в этом куске - чего ты хош? Особенно StrLen - что вернет и почему? Как думаешь?


 
SidDN   (2003-09-10 17:43) [42]

В начале пакета идёт его длина в символьном виде, отделённая от пакета #0.
Напр.: "10"#0"1234567890"

В этом коде я выкусываю из пакета его длину:
SetLength(s1, StrLen(PChar(TMP))+1);
StrLCopy(@s1[1], PChar(TMP), Length(s1)-1);
InDataSize:=StrToInt(s1);
Delete(TMP, 1, Length(s1));

В приведённом примере StrLen(PChar(TMP)) вернёт 2.
Помоему все в порядке.


 
Verg   (2003-09-10 18:23) [43]

Между запросами серверу сколько проходит время (между первым с нормальным обменом и следующим "с умиранием")?
Они идут подряд?


 
SidDN   (2003-09-10 18:34) [44]

Да по разному.Пробовал и подряд, и через время.
Дело в том, что первый запрос нормальным назвать нельзя, т.к. данные то приходят, а поток не убивается, и почему при запросе создаются 5-ть потоков? На рабочей машине создаётся всего один, и оный после отработки грохается.


 
SidDN   (2003-09-10 18:40) [45]

А давай я тебе проекты вышлю и ты у себя попробуешь?


 
Verg   (2003-09-11 09:06) [46]

Ну, давай.

andruk@mail.ru

Прикольный глюк. Вот только нет у меня XP.
Кстати, клиентскую часть (поток) я вчера гонял. Ничего криминального. Ездил на Nt4 И W2K.


 
SidDN   (2003-09-11 09:50) [47]

Послал.
Я уже в своём отделе операционки переставлять на двух машинах начал, может это поможет :)


 
Verg   (2003-09-11 10:53) [48]

1. Проверил, работает. Хоть убейся работает. Даже на 98 (подвернулась тут....)
2. Модернизировал часть клиентского кода (извини, перевел на на Паскаль :)), а то "глаз режет") - тоже работает хоть убейся.
вот модернизированный кусок (из клиентской части)

ClientSocket.Socket.SendText(Data); // Посылаем запрос
SetLength(TMP, 65535);
if Stream.WaitForData(30000) then // Ждём ответ
begin
nRead1 := Stream.Read(TMP[1], length(Tmp));
if nRead1 = 0 then exit;
// Определяем размер данных
S1:=pchar(Tmp);
InDataSize:=StrToIntDef(S1,-1);
if InDataSize<=0 then exit;
Data:=Copy(TMP, length(s1)+2, nRead1-length(s1)+2+1);
while length(Data)<InDataSize do // Поучаем остальные
begin
if not Stream.WaitForData(30000) then exit;
nRead := Stream.Read(TMP[1], length(Tmp));
if nRead = 0 then exit;
Data:=Data+Copy(Tmp, 1, nRead);
end;
Synchronize(Show);
end else
begin
// TimeOut
end;


 
Verg   (2003-09-11 10:58) [49]

Слушай а на кой там два штука TIdTCPClient? Мусор или перспектива?


 
SidDN   (2003-09-11 11:01) [50]

Да это я Инди пробовал, убить забыл.

Наверное глюк в машинах всётаки, щас XP переставлю попробую опять.
Спасибо за помощь!!!

Кстати а ты Инди пробовал?


 
Verg   (2003-09-11 11:01) [51]


> nRead1-length(s1) -2+1


конечно же


 
Verg   (2003-09-11 11:05) [52]


> Кстати а ты Инди пробовал?


Пробовал давно, не понравилось. К тому времени, когда ОНО появилось у меня было уже достаточно наработок с Client/Server сокетами и я решил, что "свои баги ближе к телу" :))


 
SidDN   (2003-09-11 11:28) [53]

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


 
Verg   (2003-09-11 11:51) [54]

Лови.
Кстати, ты специально отключил оптимизацию и установил выравниване полей=1?


 
Verg   (2003-09-11 11:55) [55]

Да, компилировано D6 - UpdatePack2.


 
Verg   (2003-09-11 12:00) [56]

И это....,
по-моему ты рискуешь жестко нарваться с выравниванием. У меня, например исходники ScktComp (и не только) лежат в пути компиляции. И я могу с любым выравниванием работать.
Не уверен, но как гипотеза...


 
SidDN   (2003-09-11 12:04) [57]

С оптимизацией и выравниванием - это я пробовал, думал может влияет както.

Твои exe-шники тоже глючат :(((((

Кстати на одной машине перебил операционку, начало работать.

Теперь остаётся выяснить в чём был бок.


 
Verg   (2003-09-11 12:08) [58]

"А ведь говорил Мослатый Слизняку: держись, дурак, от канав подальше, а то ведь и хоронить нечего будет... " (С) Стругацкие

Это я про XP.


 
SidDN   (2003-09-11 12:15) [59]

:))))
Спасибо большое за помощь!
Ну а насчёт XP - мне деваться некуда, надо писать под неё.
Буду разбираться... :(



Страницы: 1 2 вся ветка

Форум: "Сети";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.035 c
3-40836
chtr
2003-10-21 14:22
2003.11.13
Ошибка Row cannot be located for updating


3-40842
Jony
2003-10-21 18:18
2003.11.13
Как программно снять выделение записи в DBGridEh?


1-41265
Turonix
2003-10-31 13:41
2003.11.13
Как удалить директорию с фалами?


1-41685
Egorr
2003-10-24 21:57
2003.11.13
Delphi && URL


3-41043
Tumcoat
2003-10-14 08:52
2003.11.13
Физическое удаление записей





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский