Главная страница
    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-21232
nika_ufc
2002-09-11 19:14
2002.10.07
help plz


14-21197
Alibaba
2002-09-10 17:09
2002.10.07
БД -> InterNet


4-21300
Cybermonk
2002-08-20 07:58
2002.10.07
Units


6-21181
Pavel2002
2002-07-08 22:45
2002.10.07
Как с сервака клиенту послать комманду на выключения компа???


4-21340
SergeBSL
2002-08-22 01:58
2002.10.07
Еще 1 про позицию курсора в Edit





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