Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.035 c
3-41088
paul_k
2003-10-23 13:39
2003.11.13
Параметры в TAdoDataSet


1-41456
MaG
2003-11-04 16:06
2003.11.13
....без модуля Forms


8-41758
Andrew S
2003-07-08 17:11
2003.11.13
Копирование в TBitmap с применением своей палитры


1-41495
Ник
2003-10-28 15:46
2003.11.13
Графический редактор


3-40884
Митяй
2003-10-24 18:41
2003.11.13
Есть ли толковая замена PARADOX?