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

Вниз

Событие OnServerSockeClientWrite   Найти похожие ветки 

 
kosmach   (2002-08-07 12:44) [0]

Простите если совсем задрал, но как мне сказали, событие onClientWrite происходит, когда сервер передал последний байт из буфера и снова готов передавать, или сразу при коннекте. Однако у меня оно срабатывает, только во втором случае.
Вот код:
...

procedure TForm1.ClientSocketWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo.Lines.Add("Client: OnWrite");
end;

procedure TForm1.ServerSocketClientWrite(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo.Lines.Add("Server: OnClientWrite");
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
ClientSocket.Socket.SendText("Hi, Server");
end;

procedure TForm1.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo.Lines.Add("Client: Rreceive text: "+Socket.ReceiveText);
end;

procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo.Lines.Add("Server: Rreceive text: "+Socket.ReceiveText);
Socket.SendText("Hi, Client");
end;

...
Однако сколько бы я не отпрвлял message на сервер и не получал ответный, в Memo надписи "Client: OnWrite" и "Server: OnClientWrite" появляются только один раз, сразу после установки соединения.


 
ACR   (2002-08-07 19:08) [1]

а ты и паверил... гы гы гы


 
kosmach   (2002-08-08 06:45) [2]


> ACR ©

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


 
MAYOR   (2002-08-08 09:56) [3]

а ты зачем все ето на одной форме сделал???сделай в разных приложениях!!!у тебя 1 приложение-1 поток!!!


 
kosmach   (2002-08-08 11:40) [4]


> MAYOR ©


Не могу я на разных формах делать, у меня требование такое, чтобы одно приложение могло бы быть как сервером, так и клиентом, вот я и пырхаюсь. Правда я тут уже надумал, как мне и без OnClientWrite"а замутиться, но если вдруг у кого-то что-то дельное будет по этому поводу, пожалуйста напишите.


 
MAYOR   (2002-08-08 11:52) [5]

огда работай в разных потоках!!! у тебя отсылка и прием происходят мгновенно. поетому у тебя не успевает читаться сообщение!!!делай многопоточное приложение!!! ксати интересно что ти придумал!!! можеш на мило отвечать быстрей получится


 
Alex Demchenko   (2002-08-08 13:11) [6]


> Однако сколько бы я не отпрвлял message на сервер и не получал
> ответный, в Memo надписи "Client: OnWrite" и "Server: OnClientWrite"
> появляются только один раз, сразу после установки соединения.

Это совсем не так! Дело в том что в OS существует некий буфер отправки информации. Т.е. когда ты вызывает send, то получается что вроде как это non-blocking операция и информация сразу ушла, на самом деле она добавляется в буффер отправки и ждет своего времени. Конечно, этот буфер небесконечен и иногда переполняется, тогда send() вернет -1 (SOCKET_ERROR) и WSAGetLastError WSAEWOULDBLOCK, через некоторое время, когда буфер будет свободен !ВЫЗЫВАЕТСЯ FD_WRITE, в этом случае ClientSocketWrite!. Другими словами FD_WRITE говорит нам о том что соrет готов для записи и можно писать до тех пор, пока не переполнится буффер (ошибка WSAEWOULDBLOCK), после того как FD_WRITE будет вызван опять, можно продолжать запить. Сорри что на компоненте это показать не могу, т.к. пишу обычно свои :)


 
kosmach   (2002-08-08 13:16) [7]


> MAYOR ©

Ничего интересного я не придумал, все чего мне надо было - это послать несколько файлов с сервера клиенту, а OnClientWrite, нужен был для того, чтобы раньше времени не убить поток, который я отсылаю с сервера. Раз не работает OnClientWrite, то раз уж мне все равно клиенту имя файла посылать отдельно, так я ему еще и размер послал, а он как весь файл принял, так мне сообщение и послал, что все принял, тут я поток и убиваю. Ну или если чегото не получилось, то при дисконнекте. Вобщем может и через задницу, зато работает, проверял.
Извени, что медленно отвечаю, просто редко сюда заглядываю.


 
kosmach   (2002-08-08 13:21) [8]


> Alex Demchenko

Спасибо, я так понял, что OnClientWrite возникает не тогда когда уйдет последний байтик из буфера, а когда в буфере появится место, для помещения туда новых байтиков. Потому оно у меня и не срабатывало, так как я туда слишком мало клал и буфер никогда не наполнялся.
Все я ясно, спасибо.



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

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

Наверх




Память: 0.46 MB
Время: 0.009 c
14-21276
kull
2002-09-13 15:09
2002.10.07
Зависит ли скорость загрузки от браузера?


14-21204
Карелин Артем
2002-09-11 09:19
2002.10.07
Хочу написать статью по Екселю.


1-20988
Yarovoi Andrei
2002-09-26 17:23
2002.10.07
Подскажите как можно прервать цикл


1-21011
turusov
2002-09-25 15:24
2002.10.07
Object Pascal and Delphi


1-20998
SZap
2002-09-26 13:03
2002.10.07
Немогу получить путь к ехе файлу...





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