Форум: "Начинающим";
Текущий архив: 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