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

Вниз

Помогите с indy 9   Найти похожие ветки 

 
daxter ©   (2009-04-19 22:29) [0]

Здравствуйте мастера.

Есть такой код (часть кода). Сервер чата.


procedure TFormServer.TCPServerExecute(AThread: TIdPeerThread);
var
 Zagolovok : TZagolovok;
 Buffer    : array [0..10000] of char;
begin
 try
   while AThread.Connection.Connected do
   begin
     AThread.Connection.ReadBuffer(Zagolovok, SizeOf(Zagolovok)); // первая строка
     MemoLog.Lines.Add("Пришел пакет заголовок...");
     MemoLog.Lines.Add("ID - "+IntToStr(Zagolovok.ID));
     MemoLog.Lines.Add("Comm - "+IntToStr(Zagolovok.Comm));
     MemoLog.Lines.Add("Size - "+IntToStr(Zagolovok.Size));
     AThread.Connection.ReadBuffer(Buffer, Zagolovok.Size); // эта строка
     MemoLog.Lines.Add("Пришел основной пакет...");
     case Zagolovok.Comm of
         1: Begin MemoLog.Lines.Add("Буду проверять логин..."); ProveritLogin(AThread, @Buffer); end;
        50: Begin MemoLog.Lines.Add("Разошлю всем сообщение..."); PrishloMsg(AThread, @Buffer); end;
     end;
   end;
 except
   on E: Exception do
     ;//MemoLog.Lines.Add("Типа ошибка... "+E.Message);
 end;
end;


Полные исходники сервера и клиента здесь (не доделанные, но рабочие) http://slil.ru/27465268

Проблема в следующем. При запуске сервера и клиента на одном компьютере все ништяк. Даже если клиентов запускать много. Но если клиента запускаю на другом компе в локальной сети, то такая ситуация: Клиент подключается, но при отправке    
информации о клиенте, сервер заголовок сообщения принимает нормально, а вот следующий ReadBuffer не срабатывает а возвращается к первой строке "эта строка" не срабатывает и сообщение после нее не выводится. выводится несколько раз подряд "Пришел пакет заголовок...". Что странно при отладке в среде вроде работает. Вобщем объяснить тяжело, надо компилировать и пробовать. Что можете подсказать? И как вообще исходник для работы с большим числом соединений пригоден?

Заранее спасибо.


 
Германн ©   (2009-04-20 01:23) [1]


> При запуске сервера и клиента на одном компьютере все ништяк.
>  Даже если клиентов запускать много. Но если клиента запускаю
> на другом компе в локальной сети, то такая ситуация: Клиент
> подключается, но при отправке    
> информации о клиенте, сервер заголовок сообщения принимает
> нормально, а вот следующий ReadBuffer не срабатывает а возвращается
> к первой строке "эта строка" не срабатывает и сообщение
> после нее не выводится. выводится несколько раз подряд "Пришел
> пакет заголовок...". Что странно при отладке в среде вроде
> работает.

Да собственно ничего странного. Времена/скорости разные. На локальном компьютере всё делается быстро, а в сети заметно медленнее. Под отладчиком всё нормально работает именно по этой же причине.

Дальнейшее к тем кто знает Инди. Я с ней никогда не работал. Как и вообще не работал синхронно с ТСР.


 
daxter ©   (2009-04-20 09:38) [2]

Скорость это понятно, но почему второй ReadBuffer не срабатывает, а возвращается к первому. У indy на сколько я знаю блокирующие сокеты, а значит они должны ждать из сети данных. Или я не прав.


 
Сергей М. ©   (2009-04-20 09:44) [3]


> daxter ©   (20.04.09 09:38) [2]


Начнем с того, что обработчик OnExecute выполняется в контексте дополнительного потока.
Обращение в контексте доп.потока к виз.VCL-контролам недопустимо.


 
daxter ©   (2009-04-20 10:05) [4]

Начнем с того, что обработчик OnExecute выполняется в контексте дополнительного потока.
Обращение в контексте доп.потока к виз.VCL-контролам недопустимо.


это понятно, но к теме не относится. Что по вопросу сказать можете, или это происходит потому, что я к VCL из потока обращаюсь? быть такого не может


 
Сергей М. ©   (2009-04-20 10:16) [5]


> понятно, но к теме не относится


Вот сначала устрани грубую ошибку, потом будет и по теме.


 
daxter ©   (2009-04-20 10:31) [6]

вывода в мемо поле и не было, я их навстовлял для отладки. При одном подключении ничего страшного с этого не будет. Как я уже говорил в, отладчике при пошаговом проходе, все работает нормально.


 
Сергей М. ©   (2009-04-20 10:36) [7]


> "эта строка" не срабатывает и сообщение после нее не выводится


Значит при выполнении ReadBuffer возникает искл.ситуация.


 
daxter ©   (2009-04-20 10:46) [8]

видимо прийдется по другому организовывать чтение из сокета

придумал

например перед первым чтением из сокета проверять Zagolovok если он заполнен, то прочитать из сокета в буфер Size байт и очистить Zagolovok, если не заполнен то ждем из сокета заголовок. Вроде так должно быть нормально


 
Медвежонок Пятачок ©   (2009-04-20 10:49) [9]

>придумал

например перед первым чтением из сокета проверять Zagolovok е


ага. придумал. читаешь SizeOf(Zagolovok)), а там на самом деле уже buffer от клиента в это время пришел.
выбрасываешь его и ждешь буфер, а клиент там снова заголовок отправил.
и так далее......


 
daxter ©   (2009-04-20 10:54) [10]

а там на самом деле уже buffer от клиента в это время пришел

а куда же заголовок делся. от клинета сначала заголовок отправляется а потом буфер. или они в дороге могли местами поменяться


 
daxter ©   (2009-04-20 10:55) [11]

на самом деле да ошибки возможны. лучше как было, последовательно. пришел заголовок, сразу получил буфер


 
Anatoly Podgoretsky ©   (2009-04-20 11:03) [12]


> daxter ©   (20.04.09 10:46) [8]

Чего только русский программист не придумает, лишь бы не работать.


 
Palladin ©   (2009-04-20 11:08) [13]

а названия, названия то какие экзотические :) zagolovok :))


 
daxter ©   (2009-04-20 11:11) [14]

спасибо за советы, я понял, знатоков много, а мастеров нет


 
Anatoly Podgoretsky ©   (2009-04-20 11:18) [15]

> daxter  (20.04.2009 11:11:14)  [14]

Знатоки оценили степень извращения и нежелание автора прислушиваться к советом, нафига же тогда бисер метать?


 
daxter ©   (2009-04-20 11:22) [16]

я не видел ни одного совета, кроме убрать обращения к VCL объектам


 
Сергей М. ©   (2009-04-20 11:30) [17]


> не видел ни одного совета


Глаза разуй - [7]


 
Palladin ©   (2009-04-20 11:31) [18]


> Глаза разуй - [7]

чем сильней обуты глаза - тем круче быдлокодер :)


 
daxter ©   (2009-04-20 11:37) [19]

спасибо за внимание.

тем круче быдлокодер приятно познакомится.

тема закрыта. я не туда попал.


 
Palladin ©   (2009-04-20 11:47) [20]

ты прав, с такими вопросами и отношением к отвечающим тебе на форум к кашпировским



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

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

Наверх





Память: 0.5 MB
Время: 0.02 c
15-1238071462
Артур Пирожков
2009-03-26 15:44
2009.05.31
Западные интернет-магазины. Есть опыт покупок?


2-1239879647
NieL
2009-04-16 15:00
2009.05.31
TStrings -> метод GetDelimitedText свойства DelimitedText


10-1158088401
Kiril
2006-09-12 23:13
2009.05.31
Обработка ошибок Excel из Delphi.


15-1237743773
Коммуноцентрист1
2009-03-22 20:42
2009.05.31
Зачм так положены трубы?


15-1238358604
Юрий
2009-03-30 00:30
2009.05.31
С днем рождения ! 30 марта 2009 понедельник





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский