![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OnClientWrite [D6, Win2k]
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;