Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

OnClientWrite [D6, Win2k]


Страницы:   1 2

Dmitriy Polskoy ©   (2002-11-25 14:22:00) 

Ув. Мастера помогите разобраться. Я никак не могу до конца понять когда возникает сабж. Насколько я понял это событие возникает в момент когда в сокет можно передавать данные. Например, вызвав Send-метод, я анализирую Result и если кол-во байт реально переданных меньше отправляемого значения, то жду события ClientWrite, в котором допередаю оставшиеся байты.
Привожу пример, в котором передаю через сокет вайл потоком. Результат передачи пишу в листбокс. В случае неудачи, когда сокет освободиться по-идее должно сработать OnClienWrite. Но что-то не так. Еще раз прошу - помогите разобраться.


Digitman   (2002-11-25 14:41:00) [21]

если SendStream(X), вызванный НЕВАЖНО ГДЕ , вернул False, просто следует сохранить где-нибудь ссылку на объект-поток X, иначе - очистить ссылку (ибо при SendStream(X) = True объект-поток будет уничтожен автоматически в теле метода SendStream как полностью и успешно переданный)

procedure TMainForm.ServerSocketClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
// это событие возникнет, если предыдущий вызов SendStream() возвратил False. Здесь следует повторить вызов SendStream() для того же объекта-потока, если он в этот момент еще/уже существует

...
end;


Dmitriy Polskoy   (2002-11-25 14:24:00) [22]

Забыл дописать код
procedure TMainForm.Button1Click(Sender: TObject);
var
X: TMemoryStream;
S: Integer;
Ok:Boolean;
begin
X := TMemoryStream.Create;
X.LoadFromFile("c:\222.zip");
S := X.Size;
ListBox1.Items.Add(IntToSTr(S));
X.Position := 0;
Ok := ServerSocket.Socket.Connections[0].SendStream(X);
if Ok then
ListBox1.Items.Add("Ok")
else
ListBox1.Items.Add("No");
ListBox1.Items.Add("-------");
end;

procedure TMainForm.ServerSocketClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage("OnWrite");
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо