Все вопросы, связанные с программированием
Модератор: Злобные админы
-
AL
- Старшекурсник
- Сообщения: 361
- Зарегистрирован: Чт, 13.04.2006 08:20
Сообщение
AL » Пт, 13.10.2006 15:41
При получении файла размер которого больше ~2.1Mb вот таким образом прога просто-напросто вылетает! Если файл меньше - никаких проблем.
Может кто-нибудь знает в чем дело? Поделитесь мыслями, заранее благодарен.
Код: Выделить всё
SC:LongWord;
Buf: array[1..BufSize] of Byte;
FlT:File;
...
ReWrite (FlT, 1);
...
SC:=0;
...
AC:=ClientSocket.Socket.ReceiveBuf(Buf, BufSize);
if AC>0 then
begin
BlockWrite (FlT, Buf, AC);
Inc(SC,AC);
...
end;
until SC>=FSize;

-
vag
- из зажрамшихся
- Сообщения: 577
- Зарегистрирован: Пт, 13.02.2004 18:50
- Откуда: физ.-мат. деревня Глазов
Сообщение
vag » Пт, 13.10.2006 23:34
приведенных участков кода недостаточно,
однако, если судить по дампу, твоя программа пыталась обратиться к "чужой" памяти, что и вызвало ошибку защиты
С уважением,
Vladimir Gerasimov (aka vag)
-
Destion
- Дипломник
- Сообщения: 544
- Зарегистрирован: Ср, 14.06.2006 17:47
Сообщение
Destion » Сб, 14.10.2006 13:33
То есть, если продолжить гадание

, отведенный участок памяти под буфер недостаточен и при превышении оного, искомые ~2,1 Мб, осуществляется попытка занять под переменную уже занятый участок памяти. Хех. Видимо в ходе инициализации исполняемого процесса существующие настройки недостаточны для его полноценной работы. Хихик, но кажись автор ап этом тожи знаит.

1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.
-
AL
- Старшекурсник
- Сообщения: 361
- Зарегистрирован: Чт, 13.04.2006 08:20
Сообщение
AL » Пн, 16.10.2006 16:58
С этим делом разобрался - Application.ProcessMessages; был
причиной... а может вся эта организация...
Код: Выделить всё
repeat
AC:=ClientSocket.Socket.ReceiveBuf(Buf, BufSize);
if AC>0 then
begin
BlockWrite (FlT, Buf, AC);
Inc(SC,AC);
...
end;
====>Application.ProcessMessages;
until SC>=FSize;
Участок кода переписан.
-
AL
- Старшекурсник
- Сообщения: 361
- Зарегистрирован: Чт, 13.04.2006 08:20
Сообщение
AL » Пн, 16.10.2006 17:13
и снова проблемы... с асинхронным режимом...
Написать обработчик событий FD_Read, FD_Accept, FD_Close если проге есть форма не так уж трудно, а как быть если в программе нет этой самой формы и вообще никаких визуальных компонентов?
Не понятно что передавать функции WSAAsyncSelect в качестве второго параметра (хэндл окна).
-
Destion
- Дипломник
- Сообщения: 544
- Зарегистрирован: Ср, 14.06.2006 17:47
Сообщение
Destion » Пн, 16.10.2006 17:21
Если трабла только в этом, то создай прозрачное окно или за пределами рабочего стола.
Кроме того попробуй передать хэндл процесса:
Код: Выделить всё
// Получение снимка состояния системы
hSnapshot := CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
// Получене инфоpмации о пеpвом пpоцессе в списке
Process32First();
// Получение инфоpмации о следующем пpоцессе в списке
Далее в цикле Process32Next();
Это просто где можно поискать. И хва увлекаться вирями.

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

1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.
-
AL
- Старшекурсник
- Сообщения: 361
- Зарегистрирован: Чт, 13.04.2006 08:20
Сообщение
AL » Пн, 16.10.2006 17:31
Если трабла только в этом, то создай прозрачное окно или за пределами рабочего стола.
Неа... окон создавать не хочу.
И хва увлекаться вирями.
Хе... с чего ты взял? Просто нужно написать простой сервер.
Есть более конструктивная область приложения в том числе и твоего интеллекта.
Дааа? Ну-ка, ну-ка освети эту область. Небось философия?
-
Destion
- Дипломник
- Сообщения: 544
- Зарегистрирован: Ср, 14.06.2006 17:47
Сообщение
Destion » Пн, 16.10.2006 17:39
AL писал(а):Неа... окон создавать не хочу.
Хочу-нехочу; задача стояла: что передать в качестве хендла окна.

AL писал(а):Хе... с чего ты взял? Просто нужно написать простой сервер.
Да, да, прооостенький такой, штоп он чисто слушал один порт и по ctrl+alt+del под 95/98-м ничем не выдавал своего присутствия и периадичиски коя што передавал по запросу "клиента"

.
AL писал(а):Дааа? Ну-ка, ну-ка освети эту область. Небось философия?
Та ну иё ф пень эту пиласофийу. Если по теме, то например распеделенные вычисления для моделирования физических процессов в реальном времени. И не надо при этом прятать сервер из списка окон.

1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.
-
AL
- Старшекурсник
- Сообщения: 361
- Зарегистрирован: Чт, 13.04.2006 08:20
Сообщение
AL » Пн, 16.10.2006 18:05
Destion писал(а):Хочу-нехочу задача стояла: что передать в качестве хендла окна.
Ищем другои вариант.
Destion писал(а):Да, да, прооостенький такой, штоп он чисто слушал один порт и по ctrl+alt+del под 95/98-м ничем не выдавал своего присутствия и периадичиски коя што передавал по запросу "клиента"
Сделать это будет просто, точнее сделано...
Destion писал(а): Если по теме, то например распеделенные вычисления для моделирования физических процессов в реальном времени. И не надо при этом прятать сервер из списка окон.
Из списка окон ничего прятать не надо - просто их не надо создавать.
Ну а чтобы организовать хоть какие-нибудь параллельные вычисления нужен как раз похожий сервачок.
-
Destion
- Дипломник
- Сообщения: 544
- Зарегистрирован: Ср, 14.06.2006 17:47
Сообщение
Destion » Пн, 16.10.2006 18:11
Ищи, Тузик, ищи. Мне например DelphiWorld в поисках помогает.
Ну а для того чтобы управлять сервачком нужен интерфейс, и желательно - графический, иначе управление грозит превратиться в гимор с постоянными трассировками кода. Вощем окошко треба ну или хотя-бы в трей иконку с попап менюшкой.

1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.
-
AL
- Старшекурсник
- Сообщения: 361
- Зарегистрирован: Чт, 13.04.2006 08:20
Сообщение
AL » Пн, 16.10.2006 18:17
Destion писал(а):Ищи, Тузик, ищи. Мне например DelphiWorld в поисках помогает.

DelphiWorld, батенька, пока ничего дельного не сказал. Может быть я его не так пытаю.
Destion писал(а):Ну а для того чтобы управлять сервачком нужен интерфейс, и желательно - графический, ...
Дых... речь идёт о сервере, а не о клиенте (с ним-то пока все в порядке).
-
Destion
- Дипломник
- Сообщения: 544
- Зарегистрирован: Ср, 14.06.2006 17:47
Сообщение
Destion » Пн, 16.10.2006 18:28
Ну ты лентяй

. Вот что мне выдал DW при поиске текста WSAAsyncSelect, вощем мон поражён.
Код: Выделить всё
Что нужно давать WSAAsyncSelect в качестве параметра handle
--------------------------------------------------------------------------------
Автор: Nomadic
Что нужно давать WSAAsyncSelect в качестве параметра handle, если тот запускается и используется в dll (init), и никакой формы (у которой можно было бы взять этот handle) в этой dll не создается?
const
WM_ASYNCSELECT = WM_USER + 0;
type
TNetConnectionsManager = class(TObject)
protected
FWndHandle: HWND;
procedure WndProc(var MsgRec: TMessage);
...
end;
constructor TNetConnectionsManager.Create
begin
inherited Create;
FWndHandle := AllocateHWnd(WndProc);
...
end;
destructor TNetConnectionsManager.Destroy;
begin
...
if FWndHandle <> 0 then
DeallocateHWnd(FWndHandle);
inherited Destroy;
end;
procedure TNetConnectionsManeger.WndProc(var MsgRec: TMessage);
begin
with MsgRec do
if Msg = WM_ASYNCSELECT then
WMAsyncSelect(MsgRec)
else
DefWindowProc(FWndHandle, Msg, wParam, lParam);
end;
Hо pекомендую посмотpеть WinSock2, в котоpом можно:
WSAEventSelect( FSocket, FEventHandle, FD_READ or FD_CLOSE );
WSAWaitForMultipleEvents( ... );
WSAEnumNetworkEvents( FSocket, FEventHandle, lpNetWorkEvents );
То есть, обойтись без окон и без очеpеди сообщений windows, а заодно иметь возможность pаботать и с IPX/SPX, и с netbios.
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay
1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.
-
AL
- Старшекурсник
- Сообщения: 361
- Зарегистрирован: Чт, 13.04.2006 08:20
Сообщение
AL » Пн, 16.10.2006 18:38
Йэх... лентяй-не лентяй, но это найдено давно... вот только "прикрутить" пока не получается.
"Изучаем" *Event* - содержащие функции...
-
Destion
- Дипломник
- Сообщения: 544
- Зарегистрирован: Ср, 14.06.2006 17:47
Сообщение
Destion » Пн, 16.10.2006 18:41
Ну эт уже не ко мне.

Не я ведь сервер ваяю, тем более свой я уже тыщу лет назад замостырил.

А пользовал для взлома пароля.

И ни каких проблем.

1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.
-
AL
- Старшекурсник
- Сообщения: 361
- Зарегистрирован: Чт, 13.04.2006 08:20
Сообщение
AL » Пн, 16.10.2006 18:49
Ну тады просвети меня неучёного, как лучше сделать.
Свой-то небось на каких-нибудь TServerSocket/TClientSocket "замостырил".
-
Destion
- Дипломник
- Сообщения: 544
- Зарегистрирован: Ср, 14.06.2006 17:47
Сообщение
Destion » Пн, 16.10.2006 18:56
Неа, на IdTCPServer - штучка изумительная. Я балдел когда кодил, всего час делов и готовый сервак.

Читай доки по компоненту, он в палитре есть.

Копаться в собственной памяти лень - пиво стынет.

1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.
-
AL
- Старшекурсник
- Сообщения: 361
- Зарегистрирован: Чт, 13.04.2006 08:20
Сообщение
AL » Пн, 16.10.2006 19:03
Пасиба...
... однако лишние 50 кб после компиляции ставят под вопрос его использование.

-
Destion
- Дипломник
- Сообщения: 544
- Зарегистрирован: Ср, 14.06.2006 17:47
Сообщение
Destion » Пн, 16.10.2006 19:06
Начит маскируй под чтонить дельное типа скринсейвер.

1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.
-
il
- Ленивое существо
- Сообщения: 277
- Зарегистрирован: Пт, 13.02.2004 17:57
Сообщение
il » Вт, 17.10.2006 07:50
Destion писал(а): Если по теме, то например распеделенные вычисления для моделирования физических процессов в реальном времени. И не надо при этом прятать сервер из списка окон.

Вот-вот, можно об этом поподробнее. Есть ли опыт в создании распределенных вычислений. А то хотелось был лабочку создать по параллельному программированию на эту тему.
-
Destion
- Дипломник
- Сообщения: 544
- Зарегистрирован: Ср, 14.06.2006 17:47
Сообщение
Destion » Вт, 17.10.2006 09:58
Да нет, у меня была задача по взлому пароля одного запароленного rar-архива ну я написал сервачок, и клиент к нему. Взламывал по словарю. Клиенты отправляли серверу запрос на очередную порцию паролей и сервер отсылал еще не проверенные записи из словаря если пароль находился сервак останавливался с выдачей этого самого пароля и имени машины на котором все стало известно

. Так вот, раскидал копии архива с клиентами по машинам в классе и осуществил распределенную атаку на архив по словарю.

Вооот, а для моделирования физических процессов нужно распределять вычисления характеристик по тем же машинам в зависимости от времени например, чтобы сервер получал уже вычисленные величины. Ну например делить секунду на 10 частей и каждый клиент, получив определенную функцию, вычисляет десять значений функции в зависимости от времени, полученные результаты отправляет на сервак. Сервак же в свою очередь тупо подставляет полученные величины для отображения процесса. Вощем пока все пашут, сервер занимается рисованием.

1 Терапевт - это 1024 Гигапевта или 1048576 Мегапевтов.